これを使って簡単な JSON パーサーを作成しました。私がしたいのは、GoogleマップAPIを使用してビジネスの名前と緯度/経度を解析することだけですが、正しく解析できないようです。
JSON 結果の例:
"results" : [
{
"geometry" : {
"location" : {
"lat" : 41.8881090,
"lng" : -87.6308430
}
},
"name" : "American Bar Association",
},
{
"geometry" : {
"location" : {
"lat" : 41.8721230,
"lng" : -87.6294680
}
},
"name" : "Bar Louie",
} ], "status" : "OK"}
例を短くするために、興味のないその他の詳細をいくつか取り出しましたが、これが私のコードです。
JSONParser jParse = new JSONParser();
JSONObject json = jParse.getJSON(url);
try
{
JSONArray contacts = json.getJSONArray("results"); //Parent Node
for(int i = 0; i < 5; i++)//Loop through first 5 results results
{
JSONObject c = contacts.getJSONObject(i);
name = c.getString("name");//Gets name field
//get lat from location which is a sub object of geometry
lat = Float.valueOf (contacts.getJSONObject(i).getJSONObject("geometry").getJSONObject("location").getString("lat"));
}
} catch (JSONException e) { e.printStackTrace(); }
実行すると、最初の結果がうまく取得され、正しい名前と緯度が取得されますが、2 番目の結果に移動する代わりに、i の最後の結果に移動し、ループの残りの部分を出力します。説明するのは難しいですが、5 つの結果をループすると次のようになります。
- Loop 1 Output: Result#1 //これでOK
- Loop 2 Output: Results#5 //何らかの方法で #2 を取得する代わりに結果 #5 にスキップします
- Loop 3 Output: Results#5 //残りのループで毎回 #5 を出力し続ける
- ループ 4 出力: 結果 #5
- ループ 5 出力: 結果 #5
forループを無視して最後の結果にたどり着く方法がわかりませんか?短いスニペットのために省略したトーストメッセージだけで結果を印刷しています。
(これを別のスレッドで実行し、ハンドラーを使用してトースト メッセージを表示していることに注意してください)
私はJavaがそれほど得意ではありません.JSONを扱うのは初めてなので、私が言ったかもしれない愚かなことを惜しまないでください. どんな助けでも大歓迎です。:)