我使用this创建了一个简单的JSON解析器。我想要做的就是使用Google maps api解析名称和lat / lng的业务,但我似乎无法正确解析它。
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(); }
当我运行它时,我得到第一个结果就好了,我得到正确的名称和纬度但不是移动到第二个结果,它移动到i的最后结果并打印它用于循环的其余部分。很难解释,我的意思是如果我循环完成5个结果我得到:
我不知道它是如何忽略for循环并获得最后的结果?我只用一个Toast消息打印结果,我留下了一个较短的片段。
(我会注意到我通过一个单独的线程运行它并使用处理程序显示Toast消息,如果这很重要的话)
我在Java中真的不是那么棒,而且这是我第一次使用JSON,所以我可以说任何愚蠢。任何帮助深表感谢。 :)
答案 0 :(得分:0)
嗨我无法理解你的五个循环,因为你说它应该只有三个循环。一旦我使用JSON文件,我遇到了类似的问题。我建议你打印
之后的实际对象数量JSONArray contacts = json.getJSONArray("results");
我的问题是我认为我在数组中有我想要的元素(联系人 - 用3个对象填充)但实际上我有一些不同的东西(例如几何对象)
在我使用JSON的语言中,结果是字典,所以也许你不应该连接getJSONObject
contacts.getJSONObject(i).getJSONObject("geometry").getJSONObject("location").getString("lat")
答案 1 :(得分:0)
我最终回答了自己的问题。我认为这是因为我每次通过循环重新使用name变量,并且在处理程序启动和完成时显示第一条消息,循环已经完成并为最后一个值分配名称。因此,当其他4个处理程序请求最终执行时,它只打印了相同的值4次。