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

2 Different Json Objects are printed as a response, how to separate them and read the value of an element in the second Object

我在一个 HTTP 响应中得到了多个 json 个对象。

例如:

{
    "result": {
        "Status": "complete",
        "id1": "<id1>",
        "id2": "<id2>",
        "Fields": [{
            "fid": "1",
            "FName": "<name>"
        }, {
            "fid": "2",
            "FName": "<name>"
        }, {
            "fid": "3",
            "FName": "<name>"
        }, {
            "fid": "4",
            "FName": "<name>"
        }]
    }
}

下一个对象是

{
    "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
                }
            }
        }]
    }
}

我实际上想检查 TokenPairs 但是当我检查 jsonPath 时它选择了第一个对象并且 returns 为空。如何跳过第一个对象并转到第二个对象?我试图通过将响应 (String) 添加到 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个token,取到第一个之后再取字符串的剩余部分。我用 JSONTokener 拿起第一个 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" +
    "}";

请注意,为了获得 substring 的精确索引,我们需要使用我使用过的 replaceAll 函数删除所有空格和换行符。希望这个小技巧能帮到你。