web-dev-qa-db-ja.com

JSONObjectテキストは、「{」エラーの1 [文字2行1]で始まる必要があります

String JSON = "http://www.json-generator.com/j/cglqaRcMSW?indent=4";

JSONObject jsonObject = new JSONObject(JSON);
JSONObject getSth = jsonObject.getJSONObject("get");
Object level = getSth.get("2");

System.out.println(level);

このリンク を解析するための多くのソリューションを紹介しましたが、問題の同じエラーがまだ発生しています。それを解析するための簡単なソリューションを教えてもらえますか?.

12
Dev-X

あなたの問題はString JSON = "http://www.json-generator.com/j/cglqaRcMSW?indent=4";JSONではありません。
やりたいことは、「 http://www.json-generator.com/j/cglqaRcMSW?indent=4 」へのHTTP接続を開くことですJSONresponseを解析します。

String JSON = "http://www.json-generator.com/j/cglqaRcMSW?indent=4";
JSONObject jsonObject = new JSONObject(JSON); // <-- Problem here!

サイトへの接続を開いてコンテンツを取得しません。

10
Assaf Gamliel

同じ問題がありました。サーバーからの私のJson応答は[および、]でした:

[{"DATE_HIRED":852344800000,"FRNG_SUB_ACCT":0,"MOVING_EXP":0,"CURRENCY_CODE":"CAD  ","PIN":"          ","EST_REMUN":0,"HM_DIST_CO":1,"SICK_PAY":0,"STAND_AMT":0,"BSI_GROUP":"           ","LAST_DED_SEQ":36}]

http://jsonlint.com/ は有効なjsonを示します。コピーして確認できます。

私は一時的な解決策として以下のコードで修正しました:

BufferedReader br = new BufferedReader(new InputStreamReader((response.getEntity().getContent())));
String result ="";
String output = null;
while ((result = br.readLine()) != null) {
    output = result.replace("[", "").replace("]", "");
    JSONObject jsonObject = new JSONObject(output); 
    JSONArray jsonArray = new JSONArray(output); 
    .....   
}
8
bekur

私は同じを持っていた、最初に空の改行文字がありました。それはそれを解決しました:

int i = result.indexOf("{");
result = result.substring(i);
JSONObject json = new JSONObject(result.trim()); 
System.out.println(json.toString(4));  
2
palossyl

私の場合、jsonファイルのエンコーディングが問題でした

次のようにvb .netでJSONファイルを生成していました:My.Computer.FileSystem.WriteAllText( "newComponent.json"、json.Trim、False)

そして、私はこの投稿のすべての提案を試みましたが、誰も助けませんでした。

最終的にNotepad ++では、作成されたファイルがUTF-8-BOMであることに気づきました

どのようにエンコードを選択したかはわかりませんが、エンコードをUTF-8に切り替えた後、他の変更なしで解決しました。

これが誰かを助けることを願っています。

2
Dinesh

私は同じエラーがあり、それを修正するのに苦労しました。そして、Nagaraja JBによる上記の答えは、私がそれを修正するのを助けました。私の場合:

以前:JSONObject response_json = new JSONObject(response_data);

変更後:JSONArray response_json = new JSONArray(response_data);

これで修正されました。

2
sonu1986

コードステートメントの順序が間違っているため、同じ問題が発生しました。問題を解決するには、以下の順序を維持してください。すべてのgetメソッドステートメントは、最初とその後のhttpClientメソッドです。

      HttpClient httpClient = new HttpClient();
get = new GetMethod(instanceUrl+usersEndPointUri);
get.setRequestHeader("Content-Type", "application/json");
get.setRequestHeader("Accept", "application/json");

httpClient.getParams().setParameter("http.protocol.single-cookie-header", true);
httpClient.getParams().setCookiePolicy(CookiePolicy.BROWSER_COMPATIBILITY);
httpClient.executeMethod(get);

リストをjsonに変換しようとしていたときに、小さな間違いが原因で同様の問題が発生しました。リストがjsonに変換される場合、JSONObjectではなくJSONArrayを返します。

1
Nagaraja JB

私の場合、arraylistはJSONObjectでそのエラーをスローしますが、Stringオブジェクトの配列のためにこのソリューションをフィンします

List<String> listStrings= new ArrayList<String>();
String json = new Gson().toJson(listStrings);
return json;

angular Gsonバージョン2.8.5でチャームのように動作します

1
Andres Navarro

JSONは「[」で始まり「]」で終わるため、これはJSON配列であることを意味しますが、代わりにJSONArrayを使用してください。

JSONArray jsonArray = new JSONArray(JSON);

必要に応じて、リストテストオブジェクトでマップできます。

ObjectMapper mapper = new ObjectMapper();
List<TestExample> listTest = mapper.readValue(String.valueOf(jsonArray), List.class);
0
Raymond

JSONは完全に有効です。これらのJSONクラスを使用して解析してみてください。 http://json.org/Java/

0
Daan Luttik