0

Java で次の JSON 文字列の読み取り/解析に問題があります。

コード:

try{
  json = new JSONObject(result);
//json now looks like this :-
// {'header': '[{"doc_no": "DN00001","stage":"P"}]','section':'[{"upper":100,"lower":1]'}
  if (json != null){
     // this line is throwing an exception!!
     JSONObject header =  new JSONObject("header");
   }catch(JSONException e){
    // Error Message
}

私もこれを試しました:

JSONArray  header = json.getJSONArray("header");

それでもいくつかの例外をスローします。

私は何が欠けていますか?

4

4 に答える 4

4

これは有効な JSON ファイルではありません。

'header': '[{"doc_no": "DN00001","stage":"P"}]'

配列は で囲むことはできません'
文字列は"の代わりに で囲む必要があります'

JSON 構文についてはhttp://json.org/を参照してください。

于 2012-07-18T12:51:57.503 に答える
1
JSONObject header =  new JSONObject("header");

既存のオブジェクトから「ヘッダー」フィールドを取得するつもりでしたか?

JSONObject header =  json.getJSONObject("header");

しかし、あなたのコメントから判断すると

// {'header': '[{"doc_no": "DN00001","stage":"P"}]','section':'[{"upper":100,"lower":1]'}

「ヘッダー」を配列 (オブジェクトではなく) にするつもりですが、データにはそれが文字列 (配列のように見えます) として含まれているため、おそらく Java コードだけでなく JSON も修正する必要があります。

于 2012-07-18T12:53:18.570 に答える
1

ここで男はこのコードを取ります。JSONObject を取り出したい場合は、JSON 文字列を修正します

public static void main(String[] args) throws JSONException {
    String result = "{'header': '[{\"doc_no\": \"DN00001\",\"stage\":\"P\"}]','section':'[{\"upper\":100,\"lower\":1]'}";
    JSONObject json = new JSONObject(result);
    // json now looks like this :-
    //
    if (json != null) {
        String header = json.getString("header");
        System.out.println(header);
    }

}

それで、あなたの何が問題なのですか?いくつかのこと:

  1. あなたの JSON 文字列はすべて違法です。パーサーに感謝します。そのはず

    {
      "header": [{"doc_no": "DN00001","stage":"P"}],
      "section":[{"upper":100,"lower":1]
    }
    
  2. それだけでは問題は解決しません。あなたは取得したかったのですJSONObjectが、提供したのでJSONArray(なぜそれをしたのですか?)。したがって、これらの角括弧を削除します。

  3. まだ幸せではありません。JSON ではない文字列をJSONObject(明らかに) 使用して、新しいものを作成しようとしていることがわかります。new JSONObject("header")9そして、エラーをスローしないことを期待していますか? なんと残酷なことでしょう。)さらに、あなたはしたくgetないset. したがってjson.getXXX("header")、XXX がStringJSONObjectまたはJSONArrayその他多くの場所で使用できます。

于 2012-07-18T13:09:09.993 に答える
0

JSONObject header = new JSONObject("header");

新しい を作成するのではなく、からヘッダーを取得するつもりはありませんか?jsonJSONObject

のように

JSONObject header = json.get("header");

于 2012-07-18T12:52:04.540 に答える