2015-09-03 140 views
0

我正在使用java与Json创建一个Web服务,我真的难住在一个特定的区域。我有一个Jsonarray和JsonObject在for循环中读取Json,但是现在我怎么能在for循环之外的Json的第二行中选择项?也许我的代码的一个例子会有所帮助,我的json列表是动态的,但这是格式Java如何获得一行Json数据以外的for循环

[{“state”:“LA”,“city”:“Kisatchie”},{“state”:“KS ”,‘城市’:‘天命’}]

现在我看了上面这段代码的JSON

 // the total String has the whole Json data 
     JSONObject jsonn = new JSONObject(total); 

       JSONArray jArray = jsonn.getJSONArray("location_update"); 
      JSONObject jobject = null; 
    String city="";String state=""; 
      JSONArray sss = new JSONArray(); 
      for (int i = 0; i < jArray.length(); i++) { 
       jobject = jArray.getJSONObject(i); 
       city+= jobject.getString("city"); 
       state+= jobject.getString("state"); 
       sss.put(jobject); 
      } 
     // How can I for example get Row 2 of Json here outside the for loop 
     // Row 2 is this data 
     // {state":"KS","city":"Kismet"} 

我需要这个,因为一些在JSON数据上面用于下拉选择菜单,并且只要用户点击某个项目,我想显示该行Json上的所有信息。我显然拥有比上面显示的更多的Json项目。我知道这个jobject = jArray.getJSONObject(i);被编号的项目,但我不知道我怎么能拉说出来的for循环的任何建议将是巨大

+2

我可以提出一些建议吗?不要浪费你的时间与这个尴尬的JSON库。使用Jackson是一个更好,更直观,更强大的用于Java的JSON库。 – user244255

+1

我还想补充一点,你应该已经显示了一小部分_exact_数据,你正在馈入“JSONObject”。我甚至不知道下面的答案如何能够验证他们的解决方案。 –

+0

我会听到很多关于Jackson的信息。你的权利我应该发布更多的数据,这只是我使用的是Android Studio,而数据驻留在另一个IDE中,我使用它来获取安静的api。我从现在开始。 –

回答

2

从Java开始于0编号,选择第二个数组元素如下所示:

JSONArray jArray = jsonn.getJSONArray("location_update"); 
JSONObject jobject = jArray.getJSONObject(1); 
+0

谢谢你的完美 –

1

如果你想在数组中的第二个对象:

JSONObject jsonn = new JSONObject(total); 
JSONArray jArray = jsonn.getJSONArray("location_update"); 
jobject = jArray.getJSONObject(1); 

如果您已经jsonn或jArray范围,那么你只需要:

jobject = jArray.getJSONObject(1); 
+0

感谢演示如何做到这一点,非常感谢。 –

1

你尝试这个之外循环

JSONObject jsonObject = jArray.getJSONObject(1); 

通过,我会更喜欢使用杰克逊图书馆和我的JSON直接映射到某个类的方式。你可以通过@mkyong来参考这个example

+0

是的,我只是做了,解决了它,我会将Json转换成杰克逊,因为人们说它更有用。 –

+0

这取决于你使用的是什么框架。在一些框架(比如Spring-mvc)中,你可以通过做一些改变来直接使用jackson将你的json映射到类。 –