解析Android中的JSON数组和对象

这就是JSON的样子:

[{ "pmid": "2", "name": " MANAGEMENT", "result": "1", "properties": [ { "prop_id": "32", "prop_name": "Bonneville", "address": "122 Lakeshore", "city": "Ripley", "state": "OH", "zip": "11454", "lat": "41.123", "long": "-85.5034" } ] }] 

我试图用Android中的以下Java代码解析它:

JSONObject jObj = null; 试试{jObj = new JSONObject(jsonStr);

  // We get weather info (This is an array) JSONArray jArr = jObj.getJSONArray("properties"); // We use only the first value //JSONObject JSONWeather = jArr.getJSONObject(0); JSONObject c = jArr.getJSONObject(0); String name = c.getString(TAG_NAME); String email = c.getString(TAG_EMAIL); String phone = c.getString(TAG_PHONE); } catch (JSONException e) { e.printStackTrace(); } return null; 

我没有得到任何结果。 如何成功解析此JSON? 我正在使用Android Studio。

此外,如果arrays有多个部分,我们怎样才能确保它们中的每一个都被打印出来?

您的JSON字符串以JSONArray开头。

这里是示例代码,试一试。

  JSONArray mJsonArray = new JSONArray(jsonStr); JSONObject mJsonObject = mJsonArray.getJSONObject(0); String pmid = mJsonObject.getString("pmid"); String name = mJsonObject.getString("name"); String result = mJsonObject.getString("result"); JSONArray mJsonArrayProperty = mJsonObject.getJSONArray("properties"); for (int i = 0; i < mJsonArrayProperty.length(); i++) { JSONObject mJsonObjectProperty = mJsonArrayProperty.getJSONObject(i); String prop_id = mJsonObjectProperty.getString("prop_id"); String prop_name = mJsonObjectProperty.getString("prop_name"); String address = mJsonObjectProperty.getString("address"); String city = mJsonObjectProperty.getString("city"); String state = mJsonObjectProperty.getString("state"); String zip = mJsonObjectProperty.getString("zip"); String lat = mJsonObjectProperty.getString("lat"); String lon = mJsonObjectProperty.getString("long"); } 

检查Android JSON解析教程

这是完整的分辨率示例。

 import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; public class Test { public static void main(String[] args) { JSONObject jObj = null; try { String jsonStr = "[{\"pmid\":\"2\",\"name\":\" MANAGEMENT\",\"result\":\"1\",\"properties\":[{\"prop_id\":\"32\",\"prop_name\":\"Bonneville\",\"address\":\"122 Lakeshore\",\"city\":\"Ripley\",\"state\":\"OH\",\"zip\":\"11454\",\"lat\":\"41.123\",\"long\":\"-85.5034\"}]}]"; jsonStr = jsonStr.substring(1, jsonStr.length()-1); System.out.println(jsonStr); jObj = new JSONObject(jsonStr); System.out.println("pmid="+jObj.get("pmid")); System.out.println("name="+jObj.get("name")); System.out.println("result="+jObj.get("result")); JSONArray jArr = jObj.getJSONArray("properties"); JSONObject c = jArr.getJSONObject(0); System.out.println("prop_id=="+c.get("prop_id")); System.out.println("prop_name=="+c.get("prop_name")); System.out.println("address=="+c.get("address")); System.out.println("city=="+c.get("city")); System.out.println("state=="+c.get("state")); System.out.println("zip=="+c.get("zip")); System.out.println("lat=="+c.get("lat")); System.out.println("long=="+c.get("long")); } catch (JSONException e) { e.printStackTrace(); } } } 

如在json中发布的字符串jsonStrJSONObeject的JSONArray而不是JSONArray的JOSNObject

所以将jsonStr String转换为JSONArray

 JSONArray jArray = new JSONArray(jsonStr); JSONObject c = jArray.getJSONObject(0); // get properties JSONArray from c JSONArray jArrProperties = c.getJSONArray("properties"); JSONObject jsonObject = jArrProperties.getJSONObject(0); 

在这个例子中详细信息对象包含j子数据

  JSONObject details = mJSONParser.doInBackground(); //json object Child_Registration_StaticData deta=new Child_Registration_StaticData(); try { deta.UniqueID = details.getString("UniqueID"); deta.Nameofchild= details.getString("Nameofchild"); deta.FatherName= details.getString("FatherName"); deta.DOB= details.getString("DOB"); child_name.setText(deta.Nameofchild); father_name.setText(deta.FatherName); dateof_birth.setText(deta.FatherName); } 

您的根对象是JSON数组[] ,而不是JSON对象{} 。 所以,你需要

 jObj = new JSONArray(jsonStr); jObj = jObj.getJSONObject(0); 

其余的代码现在可以正常地将jObj视为JSONObject 。 这里的概念与您为properties JSON数组所做的完全相同。

用这个

 try { JSONArray array0 = new JSONArray(Sample); JSONObject object0 = array0.getJSONObject(0); JSONArray array1 = object0.getJSONArray("properties"); JSONObject object1 = array1.getJSONObject(0); String name = object1.getString("prop_name"); } catch (JSONException e) { e.printStackTrace(); }