我有一个由JSON对象和数组组成的JSON文件。该文件如下所示:
{"Report": {"Information": [
{
"table_name1": [
{"ID": 312},
{"LASTNAME": "TESTER2"},
{"GUID": "ADSA31321"},
{"PHONE_MOBILE": 931024}}
],
"table_name2": [
{"ID": 312},
{"PID": "TESTER2"},
{"GUID": "ADSA31321"}
]
}
]}}
我正在尝试更新table_name数组中的值。问题是这个名称是动态的,而不是给予数组的静态名称。
我正在使用下面的Java类来获取ID。
if( inputJs.getJSONObject("Report").get("Information") instanceof JSONArray) {
JSONArray val= inputJs.getJSONObject("Report").getJSONArray("Information");
for(int i = 0; i < val.length(); i++) {
JSONArray jsa2=val.getJSONArray(i);
for(int j = 0; j < jsa2.length(); j++) {
JSONObject jso= jsa2.getJSONObject(j);
if(jso.equals("GUID")) {
jso.put("GUID", GetRegExpr(3));
}
}
}
}
这一行:JSONArray jsa2=val.getJSONArray(i);
会在下面创建错误:
org.json.JSONException: JSONArray[0] is not a JSONArray.
即使&#34; table_name1&#34;是一个JSONArray。
任何帮助将不胜感激。
答案 0 :(得分:2)
试试这个......
informationList = new JSONObject().getJSONObject("Report").getJSONArray("Information");
for (int i = 0; i < informationList.length(); i++) {
JSONObject information = informationList.getJSONObject(i);
Iterator<String> keys = information.keys();
while (keys.hasNext()) {
String tableName = keys.next();
JSONArray table = information.getJSONArray(tableName);
for (int j = 0; j < table.length(); j++) {
JSONObject data = table.getJSONObject(j);
String k = data.keys().next();
if (k.equals("GUID")) {
data.put("GUID", "edit ...");
}
}
}
}
如果我是你,我会使用像Gson这样的其他图书馆......
答案 1 :(得分:1)
请将您的代码替换为下面的代码
if( inputJs.getJSONObject("Report").get("Information") instanceof JSONArray){
JSONArray infoArray = inputJs.getJSONObject("Report").get("Information");
for (int i = 0; i < infoArray.length(); i++) {
JSONObject information = infoArray.getJSONObject(i);
Iterator<String> keys = information.keys();
while (keys.hasNext()) {
String tableName = keys.next();
JSONArray table = information.getJSONArray(tableName);
for (int j = 0; j < table.length(); j++) {
JSONObject data = table.getJSONObject(j);
String k = data.keys().next();
if (k.equals("GUID")) {
data.put("GUID", GetRegExpr(3));
}
}
}
}
}
答案 2 :(得分:1)
if( inputJs.getJSONObject("Report").get("Information") instanceof JSONArray){
JSONArray val= inputJs.getJSONObject("Report").getJSONArray("Information");
for(int i=0;i<val.length();i++){
JSONObject jsa2=val.getJSONObject("table_name"+i); // table_name1,table_name2,...
for(int j=0;j<jsa2.length();j++){
JSONObject jso= jsa2.getJSONObject(j);
if(jso.equals("GUID")){
jso.put("GUID",GetRegExpr(3));
}
}
}