Java 2个不同的Json对象被打印为响应,如何将它们分开并读取第二个对象中元素的值

Java 2个不同的Json对象被打印为响应,如何将它们分开并读取第二个对象中元素的值,java,response,jsonpath,Java,Response,Jsonpath,我在http响应中得到多个json对象 例如: { “结果”:{ “状态”:“完成”, “id1”:“, “id2”:“, “字段”:[{ “fid”:“1”, “FName”:” }, { “fid”:“2”, “FName”:” }, { “fid”:“3”, “FName”:” }, { “fid”:“4”, “FName”:” }] } } 下一个对象是 { "result": { "Status": "complete", "id1": "&l

我在http响应中得到多个json对象

例如:

{
“结果”:{
“状态”:“完成”,
“id1”:“,
“id2”:“,
“字段”:[{
“fid”:“1”,
“FName”:”
}, {
“fid”:“2”,
“FName”:”
}, {
“fid”:“3”,
“FName”:”
}, {
“fid”:“4”,
“FName”:”
}]
}
}
下一个对象是

{
    "result": {
        "Status": "complete",
        "id1": "<id1>",
        "id2": "<id2>",
        "Fields": [{
            "fid": "1",
            "FName": "<name>"
        }, {
            "fid": "2",
            "FName": "<name>"
        }, {
            "fid": "3",
            "FName": "<name>"
        }, {
            "fid": "4",
            "FName": "<name>"
        }],
        "TokenPairs": [{
            "Token1": "<token1>",
            "Token2": "<token2>",
            "FieldMatches": {
                "additionalProp1": {
                    "Score": 0,
                    "FalseDiscoveryRate": 0
                },
                "additionalProp2": {
                    "Score": 0,
                    "FalseDiscoveryRate": 0
                },
                "additionalProp3": {
                    "Score": 0,
                    "FalseDiscoveryRate": 0
                }
            }
        }]
    }
}
{
“结果”:{
“状态”:“完成”,
“id1”:“,
“id2”:“,
“字段”:[{
“fid”:“1”,
“FName”:”
}, {
“fid”:“2”,
“FName”:”
}, {
“fid”:“3”,
“FName”:”
}, {
“fid”:“4”,
“FName”:”
}],
“令牌对”:[{
“标记1”:“,
“标记2”:“,
“现场比赛”:{
“额外建议1”:{
“分数”:0,
“FalseDiscoveryRate”:0
},
“额外建议2”:{
“分数”:0,
“FalseDiscoveryRate”:0
},
“额外建议3”:{
“分数”:0,
“FalseDiscoveryRate”:0
}
}
}]
}
}

实际上,我想检查
TokenPairs
,但当我检查
jsonPath
时,它会拾取第一个对象并返回null。如何跳过第一个对象并转到第二个对象?我试图通过将响应(字符串)添加到JsonObject来解决这个问题,但遇到了一些错误。

我想我已经为您找到了解决方案。我想为您提供以下函数,它将为您提供两个单独的JSON字符串

public void JSONSeparator(String JsonString) {
   try {
        JSONObject object1 = (JSONObject) new JSONTokener(jsonString.replaceAll("\\s+", "")).nextValue();
        String firstJson = object1.toString().trim();
        String nextJson = jsonString.replaceAll("\\s+", "").substring(firstJson.length());

        System.out.println("First JSON String: " + firstJson);
        System.out.println("Second JSON String: " + nextJson);
    } catch (Exception e) {
        e.printStackTrace();
    }
}
其思想是获取第一个JSON标记,然后在获取第一个标记后获取字符串的剩余部分。我使用了用于拾取第一个
JSONObject
。然后计算对象的长度,因此我使用
substring
方法得到了第二个JSON字符串

我用来传递这个函数的
JsonString
如下所示

private String jsonString = "{\n" +
    "    \"result\": {\n" +
    "        \"Status\": \"complete\",\n" +
    "        \"id1\": \"<id1>\",\n" +
    "        \"id2\": \"<id2>\",\n" +
    "        \"Fields\": [{\n" +
    "            \"fid\": \"1\",\n" +
    "            \"FName\": \"<name>\"\n" +
    "        }, {\n" +
    "            \"fid\": \"2\",\n" +
    "            \"FName\": \"<name>\"\n" +
    "        }, {\n" +
    "            \"fid\": \"3\",\n" +
    "            \"FName\": \"<name>\"\n" +
    "        }, {\n" +
    "            \"fid\": \"4\",\n" +
    "            \"FName\": \"<name>\"\n" +
    "        }]\n" +
    "    }\n" +
    "}" + "{" +
    "    \"result\": {\n" +
    "        \"Status\": \"complete\",\n" +
    "        \"id1\": \"<id1>\",\n" +
    "        \"id2\": \"<id2>\",\n" +
    "        \"Fields\": [{\n" +
    "            \"fid\": \"1\",\n" +
    "            \"FName\": \"<name>\"\n" +
    "        }, {\n" +
    "            \"fid\": \"2\",\n" +
    "            \"FName\": \"<name>\"\n" +
    "        }, {\n" +
    "            \"fid\": \"3\",\n" +
    "            \"FName\": \"<name>\"\n" +
    "        }, {\n" +
    "            \"fid\": \"4\",\n" +
    "            \"FName\": \"<name>\"\n" +
    "        }],\n" +
    "        \"TokenPairs\": [{\n" +
    "            \"Token1\": \"<token1>\",\n" +
    "            \"Token2\": \"<token2>\",\n" +
    "            \"FieldMatches\": {\n" +
    "                \"additionalProp1\": {\n" +
    "                    \"Score\": 0,\n" +
    "                    \"FalseDiscoveryRate\": 0\n" +
    "                },\n" +
    "                \"additionalProp2\": {\n" +
    "                    \"Score\": 0,\n" +
    "                    \"FalseDiscoveryRate\": 0\n" +
    "                },\n" +
    "                \"additionalProp3\": {\n" +
    "                    \"Score\": 0,\n" +
    "                    \"FalseDiscoveryRate\": 0\n" +
    "                }\n" +
    "            }\n" +
    "        }]\n" +
    "    }\n" +
    "}";
private String jsonString=“{\n”+
“\”结果\“:{\n”+
“\”状态\“:\”完成\“,\n”+
“\'id1\':\”\,\n”+
“\'id2\':\”\,\n”+
“\”字段\“:[{\n”+
“fid\:\“1\,\n”+
“\“FName\”:\“\”\n”+
},{\n+
“fid\:\“2\,\n”+
“\“FName\”:\“\”\n”+
},{\n+
“fid\:\“3\,\n”+
“\“FName\”:\“\”\n”+
},{\n+
“fid\:\“4\,\n”+
“\“FName\”:\“\”\n”+
“}]\n”+
“}\n”+
"}" + "{" +
“\”结果\“:{\n”+
“\”状态\“:\”完成\“,\n”+
“\'id1\':\”\,\n”+
“\'id2\':\”\,\n”+
“\”字段\“:[{\n”+
“fid\:\“1\,\n”+
“\“FName\”:\“\”\n”+
},{\n+
“fid\:\“2\,\n”+
“\“FName\”:\“\”\n”+
},{\n+
“fid\:\“3\,\n”+
“\“FName\”:\“\”\n”+
},{\n+
“fid\:\“4\,\n”+
“\“FName\”:\“\”\n”+
“}],\n”+
“\”令牌对\“:[{\n”+
“\'Token1\':\”\,\n”+
“\'Token2\':\”\,\n”+
“\”字段匹配\“:{\n”+
“\“additionalProp1\”:{\n”+
“分数”:0\n+
“\“FalseDiscoveryRate\”:0\n”+
},\n+
“\“additionalProp2\”:{\n”+
“分数”:0\n+
“\“FalseDiscoveryRate\”:0\n”+
},\n+
“\“additionalProp3\”:{\n”+
“分数”:0\n+
“\“FalseDiscoveryRate\”:0\n”+
“}\n”+
“}\n”+
“}]\n”+
“}\n”+
"}";

请注意,为了获得
子字符串的精确索引,我们需要使用我使用的
replaceAll
函数删除所有空格和新行。希望这个小把戏对你有帮助

显示您的代码并解释您在哪种环境中工作(控制台应用程序、GUI应用程序、Jersey、Spring MVC)。这是一组结果吗?你能把完整的回复贴出来吗?你在用Java吗?@ReazMurshed这是完整的回答,我在这里把它分为两个不同的部分,在我的回答中,我只是把它作为一个整体一个接一个地打印出来。是的,我正在使用javaki。如果这是完整响应,那么这不是有效的JSON响应。响应应该有一个开始的第三个大括号
[
和一个结束的
]
大括号来表示这是一个结果数组。@Reazmursed它有两个单独的json对象,有没有办法忽略第一个对象而进入第二个对象?(它不是json数组)
private String jsonString = "{\n" +
    "    \"result\": {\n" +
    "        \"Status\": \"complete\",\n" +
    "        \"id1\": \"<id1>\",\n" +
    "        \"id2\": \"<id2>\",\n" +
    "        \"Fields\": [{\n" +
    "            \"fid\": \"1\",\n" +
    "            \"FName\": \"<name>\"\n" +
    "        }, {\n" +
    "            \"fid\": \"2\",\n" +
    "            \"FName\": \"<name>\"\n" +
    "        }, {\n" +
    "            \"fid\": \"3\",\n" +
    "            \"FName\": \"<name>\"\n" +
    "        }, {\n" +
    "            \"fid\": \"4\",\n" +
    "            \"FName\": \"<name>\"\n" +
    "        }]\n" +
    "    }\n" +
    "}" + "{" +
    "    \"result\": {\n" +
    "        \"Status\": \"complete\",\n" +
    "        \"id1\": \"<id1>\",\n" +
    "        \"id2\": \"<id2>\",\n" +
    "        \"Fields\": [{\n" +
    "            \"fid\": \"1\",\n" +
    "            \"FName\": \"<name>\"\n" +
    "        }, {\n" +
    "            \"fid\": \"2\",\n" +
    "            \"FName\": \"<name>\"\n" +
    "        }, {\n" +
    "            \"fid\": \"3\",\n" +
    "            \"FName\": \"<name>\"\n" +
    "        }, {\n" +
    "            \"fid\": \"4\",\n" +
    "            \"FName\": \"<name>\"\n" +
    "        }],\n" +
    "        \"TokenPairs\": [{\n" +
    "            \"Token1\": \"<token1>\",\n" +
    "            \"Token2\": \"<token2>\",\n" +
    "            \"FieldMatches\": {\n" +
    "                \"additionalProp1\": {\n" +
    "                    \"Score\": 0,\n" +
    "                    \"FalseDiscoveryRate\": 0\n" +
    "                },\n" +
    "                \"additionalProp2\": {\n" +
    "                    \"Score\": 0,\n" +
    "                    \"FalseDiscoveryRate\": 0\n" +
    "                },\n" +
    "                \"additionalProp3\": {\n" +
    "                    \"Score\": 0,\n" +
    "                    \"FalseDiscoveryRate\": 0\n" +
    "                }\n" +
    "            }\n" +
    "        }]\n" +
    "    }\n" +
    "}";