Как разобрать JSON с типами данных со значениями?

После публикации JAVAEE8 теперь вы можете использовать новый JAVAEE API JSON-B ( JSR367 )

Зависимость Maven:


    javax.json.bind
    javax.json.bind-api
    1.0



    org.eclipse
    yasson
    1.0



    org.glassfish
    javax.json
    1.1

Вот некоторый снимок кода:

Jsonb jsonb = JsonbBuilder.create();
// Two important API : toJson fromJson
String result = jsonb.toJson(listaDePontos);

JSON-P также обновлен до 1.1 и более прост в использовании. JSON-P 1.1 ( JSR374 )

Зависимость Maven:


    javax.json
    javax.json-api
    1.1



    org.glassfish
    javax.json
    1.1

Вот моментальный снимок кода запуска:

String data = "{\"name\":\"Json\","
                + "\"age\": 29,"
                + " \"phoneNumber\": [10000,12000],"
                + "\"address\": \"test\"}";
        JsonObject original = Json.createReader(new StringReader(data)).readObject();
        /**getValue*/
        JsonPointer pAge = Json.createPointer("/age");
        JsonValue v = pAge.getValue(original);
        System.out.println("age is " + v.toString());
        JsonPointer pPhone = Json.createPointer("/phoneNumber/1");
        System.out.println("phoneNumber 2 is " + pPhone.getValue(original).toString());

-2
задан wardziniak 24 February 2019 в 01:17
поделиться

3 ответа

Ну, во-первых, вам не нужно упоминать типы данных, чтобы правильно проанализировать JSON, просто создайте класс POJO, соответствующий структуре JSON, а затем используйте GSON для анализа JSON в класс java

.
0
ответ дан Gaurav Sharma 24 February 2019 в 01:17
поделиться

Если вы используете Jackson2, то получите name как JsonNode

JsonNode nameNode = value.path("name");

И затем снова получите firstName и lastName как JsonNode

[111 ]

Из JsonNode firstName и JsonNode lirstName получить строковое значение

String name1 = firstName.path("string").asText();
String name2 = lastName.path("string").asText();
.
0
ответ дан Deadpool 24 February 2019 в 01:17
поделиться

Когда ваш json десериализован в ObjectNode, он фактически представляется внутри как ключ / значение карты, в котором само значение может снова быть картой, как в вашем случае. Визуально, если вы посмотрите на это, это будет что-то вроде этого. Поэтому вам нужно будет следовать этой структуре, используя get (fieldName), чтобы получить значение ИЛИ ObjectNode, если оно вложено. Помните, что если возвращаемое значение равно ObjectNode, то просто напечатав его, вы просто вернете json-фрагмент, который он представляет, поэтому вам нужно будет снова вызвать «get(fieldName)» для этого объекта.

enter image description here

0
ответ дан Shailendra 24 February 2019 в 01:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: