1

Android にプロジェクトがあり、データを使用できるように解析する必要がある JSON がここにあります (JSONLint.com で JSON を検証しようとしましたが、すべて問題ありません)。

{
    "traces": [
        "{\"lat\": \"42.842097\", \"lng\": \"-31.258422\", \"idTrace\": \"444e8079\"}",
        "{\"lat\": \"56.842097\", \"lng\": \"-73.258422\", \"idTrace\": \"088b591a\"}"
    ]
}

問題は、JSONArray 内の 2 つの JSONObjects を取得しようとすると、常にエラーが発生することです。

ここに私のコードのスニペットがあります:

     (...)

     StringBuilder builder = new StringBuilder();

     for (String line = null; (line = reader.readLine()) != null;) 
     {
          builder.append(line).append("\n");
     }


    JSONObject result = new JSONObject(builder.toString());
    JSONArray list = result.getJSONArray("traces");


    try{
        for (int i = 0; i < list.length(); i++)
            {     //this is where I get the error "JSONArray[0] is not a JSONObject"
              JSONObject jsonObject = list.optJSONObject(i); 


              //String id = jsonObject.getString("idTrace");
              //String lat = jsonObject.getString("lat");
              //String lng = jsonObject.getString("lng");

                 (...)
             }
      (...)

問題が何であるかを見つけるためにたくさん検索しましたが、人々は私とまったく同じことをしているようです...それが機能しない理由を見つけることができません!

助けてくれてありがとう!

4

2 に答える 2

1

この JSON は、あなたが制御する API から返されますか? 壊れているのは、JSONArray 内の項目を引用符で囲んでいることだと思います。JSON は次のようになります。

{"traces": [
    {"lat": "42.842097", "lng": "-31.258422", "idTrace": "444e8079"},
    {"lat": "56.842097", "lng": "-73.258422", "idTrace": "088b591a"} 
]}

各 JSONObject を引用符で囲んでいないことに注意してください。あなたが今持っているのは、文字列の配列のようなものです...

于 2013-03-17T19:47:19.707 に答える
0

それはあなたのタイプミスです、

liste.optJSONObject(i); this should be list.optJSONObject(i);
于 2013-03-17T18:48:21.843 に答える