我用this做了一个简单的JSON解析器。我所要做的就是用Google maps api解析企业的名称和纬度/经度,但我似乎无法正确解析它。JSON解析器跳过节点?
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(); }
当我运行我得到第一个结果就好,我得到正确的名称和纬度,但不是移动到第二个结果,它移动到我的最后结果,并打印其余的循环。很难解释,我的意思是,如果通过5个结果我环,我得到:
- 环路1输出:结果#1 //这是一个好
- 环2输出:结果#5 //不知怎的,我们跳过导致#5而不是获得#2
- 环3输出:结果#5 //现在它只是不断印刷#5的每个时间通过循环
- 回路4输出的其余部分:结果#5
- 环路5输出:结果#5
我不知道它是如何忽略for循环并得到最后的结果?我只用一个Toast消息打印结果,我忽略了一小段代码。
(我会注意到,我通过一个单独的线程上运行这一点,并使用一个处理程序,显示敬酒消息,如果该事项)
我真的不是在Java中伟大的,这是我第一次和JSON一起工作过,所以不用说我可能会说的任何愚蠢。任何帮助深表感谢。 :)
我改变了代码。 5循环只是我在代码循环中使用5的一个例子。抱歉。 –
你应该使用contacts.lenght或类似的东西,避免硬编码 – andres83
我将使用.length()我只是希望它只循环通过5用于测试目的。不幸的是,我仍然没有弄清楚导致这个问题的原因。 –