После публикации 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());
Ну, во-первых, вам не нужно упоминать типы данных, чтобы правильно проанализировать JSON, просто создайте класс POJO, соответствующий структуре JSON, а затем используйте GSON для анализа JSON в класс java
. Если вы используете Jackson2
, то получите name
как JsonNode
JsonNode nameNode = value.path("name");
И затем снова получите firstName
и lastName
как JsonNode
Из JsonNode firstName
и JsonNode lirstName
получить строковое значение
String name1 = firstName.path("string").asText();
String name2 = lastName.path("string").asText();
. Когда ваш json десериализован в ObjectNode
, он фактически представляется внутри как ключ / значение карты, в котором само значение может снова быть картой, как в вашем случае. Визуально, если вы посмотрите на это, это будет что-то вроде этого. Поэтому вам нужно будет следовать этой структуре, используя get (fieldName), чтобы получить значение ИЛИ ObjectNode
, если оно вложено. Помните, что если возвращаемое значение равно ObjectNode
, то просто напечатав его, вы просто вернете json-фрагмент, который он представляет, поэтому вам нужно будет снова вызвать «get(fieldName)
» для этого объекта.