У меня объект json выглядит так:
{
Yg7R_: {
fld_invoice: "Yg7R_"
fld_order_id: "5"
fld_orders: {
4: {
fld_oiid: "4"
fld_date: "2014-03-27 00:00:00"
fld_name: "20140327_H5epz2y4OB_IMG_20140326_020341.jpg"
fld_loc: "../orders/oid_5/"
}
}
}
LldP_: {
fld_invoice: "LldP_"
fld_order_id: "7"
fld_orders: {
6: {
fld_oiid: "6"
fld_date: "2014-03-27 00:00:00"
fld_name: "20140327_SovH7Xf3n2_IMG_20140326_020418.jpg"
fld_loc: "../orders/oids_7/"
}
}
}
NYEO: {
fld_invoice: "NYEO"
fld_order_id: "24"
fld_orders: {
27: {
fld_oiid: "27"
fld_date: "2014-03-27 00:00:00"
fld_name: "20140327_duLLsssVWA_IMG_20140326_020341.jpg"
fld_loc: "orders/oid_24/"
}
28: {
fld_oiid: "28"
fld_date: "2014-03-27 00:00:00"
fld_name: "20140327_F8ayA4vWrP_IMG_20140326_020405.jpg"
fld_loc: "orders/oid_24/"
}
29: {
fld_oiid: "29"
fld_date: "2014-03-27 00:00:00"
fld_name: "20140327_1FlYnuNbtr_IMG_20140326_020418.jpg"
fld_loc: "orders/oid_24/"
}
}
}
}
Я попытался разобрать, как это:
// result is the above json object.
for(int i = 0; i < result.length(); i++){
try {
invoice = result.getJSONArray(<Some name here>); // this name is dynamic
Log.d("invoice "+i, invoice);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
Но я не понимаю, как я могу получить доступ к динамическому имени. Как мы могли разобрать такой JSON
--Примечание-- Я. все значения имеют свои кавычки, например: "Yg & R_"
3 ответа
Попробуйте этот динамический парсер json
private void parseJson(JSONObject data) {
if (data != null) {
Iterator<String> it = data.keys();
while (it.hasNext()) {
String key = it.next();
try {
if (data.get(key) instanceof JSONArray) {
JSONArray arry = data.getJSONArray(key);
int size = arry.length();
for (int i = 0; i < size; i++) {
parseJson(arry.getJSONObject(i));
}
} else if (data.get(key) instanceof JSONObject) {
parseJson(data.getJSONObject(key));
} else {
System.out.println(key + ":" + data.getString(key));
}
} catch (Throwable e) {
try {
System.out.println(key + ":" + data.getString(key));
} catch (Exception ee) {
}
e.printStackTrace();
}
}
}
}
У вас нет массивов JSON. У вас есть только объекты JSON. Вместо этого вам нужно использовать getJSONObject. Массивы окружены [] и могут содержать несколько безымянных объектов, разделенных запятыми. Объекты окружены {} и имеют одно значение с одним именем.
Сделать это можно одним трюком. Вам необходимо получить весь массив ключей и соответствующий массив значений JSONObject. Следуйте приведенному ниже коду.
JSONObject jsonObj = new JSONObject(JsonResponseString);
JSONArray data1 = jsonObj.getJSONArray("Result");
JSONObject obj2 = (JSONObject) data1.get(0);
JSONArray nameArray = obj2.names();
JSONArray valArray = obj2.toJSONArray(nameArray);
String status="";
String gameId="";
for(int i=0 ; i<valArray.length() ; i++){
String name = nameArray.getString(i);
String value = valArray.getString(i);
if (value.equals("null")) {
value = "";
}
if (name.equalsIgnoreCase(Constants.Key_1)) {
Log.v(Constants.LOG, + value);
} else if (name.equalsIgnoreCase(Constants.Key_2)) {
Log.v(Constants.LOG, + value);
} else if (name.equalsIgnoreCase(Constants.Key_3)) {
Log.v(Constants.LOG, + value);
}
}
Похожие вопросы
Связанные вопросы
Новые вопросы
android
Android — это мобильная операционная система Google, используемая для программирования или разработки цифровых устройств (смартфонов, планшетов, автомобилей, телевизоров, одежды, очков, IoT). Для тем, связанных с Android, используйте теги, специфичные для Android, такие как android-intent, android-activity, android-adapter и т. д. Для вопросов, отличных от разработки или программирования, но связанных с Android framework, используйте эту ссылку: https://android .stackexchange.com.