2012-09-06 72 views
1

我用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一起工作过,所以不用说我可能会说的任何愚蠢。任何帮助深表感谢。 :)

回答

0

我最终回答我自己的问题。我认为这是因为我每次在循环中重新使用名称变量,并在处理程序加入时完成并显示循环已完成的第一条消息,并将名称指定为最后一个值。所以当其他4个处理程序请求最终被执行时,它只会打印相同的值4次。

0

嗨,我不明白你的五个循环,因为如你所说,它应该只有三个循环。有一次,当我使用JSON文件时,我遇到了类似的问题。我建议你打印物体的实数,你有

JSONArray contacts = json.getJSONArray("results"); 

我的问题后,我认为我有我的数组中想要的元素(联系人 - 与3个对象来填充),但实际上我是有一些不同的东西(例如几何对象)

在语言我有工作,JSON,结果是一本字典,所以也许你不应该Concat的getJSONObject

contacts.getJSONObject(i).getJSONObject("geometry").getJSONObject("location").getString("lat") 
+0

我改变了代码。 5循环只是我在代码循环中使用5的一个例子。抱歉。 –

+0

你应该使用contacts.lenght或类似的东西,避免硬编码 – andres83

+0

我将使用.length()我只是希望它只循环通过5用于测试目的。不幸的是,我仍然没有弄清楚导致这个问题的原因。 –