如何在JSON文件中搜索

时间:2017-11-22 11:26:16

标签: java json

我有一个由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。

任何帮助将不胜感激。

3 个答案:

答案 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));

            }
     }
}