Java 2个不同的Json对象被打印为响应,如何将它们分开并读取第二个对象中元素的值
我在http响应中得到多个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
{
“结果”:{
“状态”:“完成”,
“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" +
"}";