Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在json结构本身中重新排列json对象?JAVA_Java_Arrays_Json - Fatal编程技术网

如何在json结构本身中重新排列json对象?JAVA

如何在json结构本身中重新排列json对象?JAVA,java,arrays,json,Java,Arrays,Json,我试图在我的json结构中重新构造重复的json值,并使用最简单的方法重新排列它们 我已经到了这样的地步,每次它在JSONObject上循环时,我都设法将它存储在一个映射中,但是从这里开始,我如何继续存储映射以实现我想要的结果呢?事先非常感谢你 public static void main(String[] args) throws JSONException { String jsonString = "[{\"file\":[{\"fileRefNo\":\"AG/CSD/1\

我试图在我的json结构中重新构造重复的json值,并使用最简单的方法重新排列它们

我已经到了这样的地步,每次它在JSONObject上循环时,我都设法将它存储在一个映射中,但是从这里开始,我如何继续存储映射以实现我想要的结果呢?事先非常感谢你

public static void main(String[] args) throws JSONException  {

    String jsonString = "[{\"file\":[{\"fileRefNo\":\"AG/CSD/1\",\"status\":\"Active\"}],\"requestNo\":\"225V49\"},{\"file\":[{\"fileRefNo\":\"AG/CSD/1\",\"status\":\"Inactive\"}],\"requestNo\":\"225SRV\"},{\"file\":[{\"fileRefNo\":\"AG/CSD/2\",\"status\":\"Active\"}],\"requestNo\":\"225SRV\"}]" ;

      JSONArray json = new JSONArray(jsonString);

      Map<String, Object> retMap = new HashMap<String, Object>();

      for (int i = 0; i < json.length(); i++ ) {
        if(json != JSONObject.NULL) {
            retMap = toMap(json.getJSONObject(i));
            System.out.println(retMap + "retMap");
            //{file=[{fileRefNo=AG/CSD/1, status=Active}], requestNo=225V49}retMap
            //{file=[{fileRefNo=AG/CSD/1, status=Inactive}], requestNo=225SRV}retMap
            //{file=[{fileRefNo=AG/CSD/2, status=Active}], requestNo=225SRV}retMap
        }
      }
}
public static Map<String, Object> toMap(JSONObject object) throws JSONException {
    Map<String, Object> map = new HashMap<String, Object>();

    Iterator<String> keysItr = object.keys();
    while(keysItr.hasNext()) {
        String key = keysItr.next();
        Object value = object.get(key);

        if(value instanceof JSONArray) {
            value = toList((JSONArray) value);
        }
        else if(value instanceof JSONObject) {
            value = toMap((JSONObject) value);
        }
        map.put(key, value);
    }
    return map;
}

public static List<Object> toList(JSONArray array) throws JSONException {
    List<Object> list = new ArrayList<Object>();
    for(int i = 0; i < array.length(); i++) {
        Object value = array.get(i);

        if(value instanceof JSONArray) {
            value = toList((JSONArray) value);
        }
        else if(value instanceof JSONObject) {
            value = toMap((JSONObject) value);
        }
        list.add(value);
    }
    return list;
}
这是我想要的结果

[{
    "file": [{
            "fileRefNo": "AG/CSD/1",
            "status": "Active"
        }],
    "requestNo": "225V49"
}, {
    "file": [{
            "fileRefNo": "AG/CSD/1",
            "status": "Inactive"
        },{
            "fileRefNo": "AG/CSD/2",
            "status": "Active"
        }],
    "requestNo": "225SRV"
}]

您可以尝试将原始JSON对象转换为映射,在映射上迭代并聚合OP中描述的文件实体,然后基于聚合的映射创建新的JSON对象。请参见以下内容,以将JSON对象转换为映射:我将其转换为映射,输出如上图所示。从那以后,我是要重复out映射,还是在重复映射的过程中创建一个新的JSON?我认为创建一个新映射并将该映射作为JSON对象输出会更简单。好,但是,对于上述场景中的重复,我该如何重申呢?很简单-您的新映射应该使用
requestNo
的值作为键,使用
file
数组作为映射值。您可以尝试将原始JSON对象转换为映射,在映射上迭代,并按照OP中的描述聚合文件实体,然后根据聚合映射创建一个新的JSON对象。请参见以下内容,以将JSON对象转换为映射:我将其转换为映射,输出如上图所示。从那以后,我是要重复out映射,还是在重复映射的过程中创建一个新的JSON?我认为创建一个新映射并将该映射作为JSON对象输出会更简单。好,但是,对于上述场景中的重复项,我该如何重申呢?很简单-您的新映射应使用
requestNo
的值作为键,使用
文件
数组作为映射值。
[{
    "file": [{
            "fileRefNo": "AG/CSD/1",
            "status": "Active"
        }],
    "requestNo": "225V49"
}, {
    "file": [{
            "fileRefNo": "AG/CSD/1",
            "status": "Inactive"
        },{
            "fileRefNo": "AG/CSD/2",
            "status": "Active"
        }],
    "requestNo": "225SRV"
}]