解析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中发布的字符串jsonStr
是JSONObeject的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(); }