JSON看起来像:
[{"pmid":"2","name":"MANAGEMENT","result":"1","properties":[{"prop_id":"32","prop_name":" Tower","address":"281 Lakeshore","city":"Euclid","state":"OH","zip":"44142","lat":"54.5","long":"-81.5034"}]},{"pmid":"1","name":"ONE","result":"18","properties":[{"prop_id":"3","prop_name":"Chase","address":"146 Goon Blvd.","city":"City","state":"OH","zip":"12345","lat":"46.35","long":"-83.1138"},{"prop_id":"6","prop_name":"Club Apartments","address":"4600 Barrington Club","city":"Columbus","state":"OH","zip":"43520","lat":"40.436","long":"-83.048"}]}]
使用Android Studio,尝试使用:
进行检索private static String url = "http://appurl.com/apis/pagement_list.php";
// JSON Node names
private static final String TAG_CONTACTS = "properties";
private static final String TAG_NAME = "prop_id";
private static final String TAG_EMAIL = "prop_id";
private static final String TAG_PHONE = "prop_id";
命名节点后,我正在使用以下内容检索JSON:
@Override
protected Void doInBackground(Void... arg0) {
// Creating service handler class instance
ServiceHandler sh = new ServiceHandler();
// Making a request to url and getting response
String jsonStr = sh.makeServiceCall(url, ServiceHandler.GET);
Log.d("Response: ", "> " + jsonStr);
if (jsonStr != null) {
// We create out JSONObject from the data
JSONObject jObj = null;
try {
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");
// tmp hashmap for single contact
HashMap<String, String> contact = new HashMap<String, String>();
// adding each child node to HashMap key => value
contact.put(TAG_EMAIL, prop_name);
contact.put(TAG_NAME, name);
contact.put(TAG_PHONE, address);
// adding contact to contact list
contactList.add(contact);
}
} catch (JSONException e) {
e.printStackTrace();
}
}
else {
Log.e("ServiceHandler", "Couldn't get any data from the url");
}
return null;
}
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
// Dismiss the progress dialog
if (pDialog.isShowing())
pDialog.dismiss();
/**
* Updating parsed JSON data into ListView
* */
ListAdapter adapter = new SimpleAdapter(
MainActivity.this, contactList,
R.layout.list_item, new String[] { TAG_NAME, TAG_EMAIL, TAG_PHONE}, new int[] { R.id.name,
R.id.email, R.id.mobile});
setListAdapter(adapter);
}
}
我能够成功地在TableView中检索第一个带有Lakeshore地址的Array,Tower。但是,我不知道如何获得JSON的其他部分,例如另一个名称。
如果名称可以显示在包含prop_name的数组之前,那将会很棒。并且名称只需要显示一次,如果下面有多个prop_name。
答案 0 :(得分:0)
我不知道我是否正确理解了你的问题,但对我来说,代码看起来只是在<第二行开始之后只提取外部数组的第一个元素的子数组strong>尝试{阻止:
JSONObject mJsonObject = mJsonArray.getJSONObject(0);
你应该做的事情如下:
try {
JSONArray mJsonArray = new JSONArray(jsonStr);
int length = mJsonArray.length();
for (int i = 0; i < length; i++) {
JSONObject mJsonObject = mJsonArray.getJSONObject(i);
...
String name = mJsonObject.getString("name");
JSONArray mJsonArrayProperty = mJsonObject.getJSONArray("properties");
int innerLength = mJsonArrayProperty.length();
for (int k = 0; k < innerLength; k++) {
JSONObject mJsonObjectProperty = mJsonArrayProperty.getJSONObject(k);
String prop_name = mJsonObjectProperty.getString("prop_name");
String address = mJsonObjectProperty.getString("address");
...
// hashmap for single contact
HashMap<String, String> contact = new HashMap<String, String>();
// adding each child node to HashMap key => value
contact.put(TAG_EMAIL, prop_name);
contact.put(TAG_NAME, name);
contact.put(TAG_PHONE, address);
// adding contact to contact list
contactList.add(contact);
}
}
} catch (JSONException e) {
e.printStackTrace();
}
...
请注意,内部for循环的计数器 k 与外部循环 i 的计数器不同。 hashmap不是临时的,它被传递给集合的add方法,因此幸存下来。