2 Различные объекты Json печатаются как ответ, как их разделить и прочитать значение элемента во втором объекте. - PullRequest
0 голосов
/ 04 марта 2019

Я получаю несколько объектов json в ответе http.

Например:

{
    "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, он берет первый объект и возвращает ноль.Как я могу пропустить 1-й объект и перейти ко второму объекту?Я пытаюсь решить эту проблему путем добавления ответа (String) в JsonObject, но получаю некоторые ошибки.

1 Ответ

0 голосов
/ 04 марта 2019

Я думаю, что нашел решение для вас.Я хотел бы предоставить вам следующую функцию, которая даст вам две отдельные строки 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, а затем получить оставшуюся часть строки после получения первого.Я использовал JSONTokener для получения первого JSONObject.Затем взял длину объекта и, следовательно, я получил вторую строку JSON, используя метод substring.

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, которую я использовал.Надеюсь, этот маленький трюк поможет вам.

...