Вопрос-ответ

How to parse JSON in Java

Как разобрать JSON в Java

У меня есть следующий текст в формате JSON. Как я могу разобрать его, чтобы получить значения pageName, pagePic, post_id и т.д.?

{
"pageInfo": {
"pageName": "abc",
"pagePic": "http://example.com/content.jpg"
},
"posts": [
{
"post_id": "123456789012_123456789012",
"actor_id": "1234567890",
"picOfPersonWhoPosted": "http://example.com/photo.jpg",
"nameOfPersonWhoPosted": "Jane Doe",
"message": "Sounds cool. Can't wait to see it!",
"likesCount": "2",
"comments": [],
"timeOfPost": "1234567890"
}
]
}
Переведено автоматически
Ответ 1

Библиотека org.json проста в использовании.

Просто помните (при приведении или использовании таких методов, как getJSONObject и getJSONArray), что в нотации JSON


  • [ … ] представляет собой массив, поэтому библиотека преобразует его в JSONArray

  • { … } представляет объект, поэтому библиотека проанализирует его в JSONObject

Пример кода ниже:

import org.json.*;

String jsonString = ... ; //assign your JSON String here
JSONObject obj = new JSONObject(jsonString);
String pageName = obj.getJSONObject("pageInfo").getString("pageName");

JSONArray arr = obj.getJSONArray("posts"); // notice that `"posts": [...]`
for (int i = 0; i < arr.length(); i++)
{
String post_id = arr.getJSONObject(i).getString("post_id");
......
}

Вы можете найти больше примеров в: Разбор JSON в Java

Загружаемый jar: http://mvnrepository.com/artifact/org.json/json

Ответ 2

Для примера давайте предположим, что у вас есть класс, Person содержащий только a name.

private class Person {
public String name;

public Person(String name) {
this.name = name;
}
}

Джексон (Maven)

Мой личный фаворит и, вероятно, наиболее широко используемый.

ObjectMapper mapper = new ObjectMapper();

// De-serialize to an object
Person user = mapper.readValue("{\"name\": \"John\"}", Person.class);
System.out.println(user.name); //John

// Read a single attribute
JsonNode nameNode = mapper.readTree("{\"name\": \"John\"}");
System.out.println(nameNode.get("name").asText());

Google GSON (Maven)

Gson g = new Gson();

// De-serialize to an object
Person person = g.fromJson("{\"name\": \"John\"}", Person.class);
System.out.println(person.name); //John

// Read a single attribute
JsonObject jsonObject = new JsonParser().parse("{\"name\": \"John\"}").getAsJsonObject();
System.out.println(jsonObject.get("name").getAsString()); //John

Org.JSON (Maven)

Это предложение приведено здесь просто потому, что оно кажется довольно популярным из-за ссылки stackoverflow на него. Я бы не рекомендовал использовать его, поскольку это скорее проект проверки концепции, чем реальная библиотека.

JSONObject obj = new JSONObject("{\"name\": \"John\"}");

System.out.println(obj.getString("name")); //John
Ответ 3

  1. Если кто-то хочет создать Java-объект из JSON и наоборот, используйте сторонние банки GSON или JACKSON и т.д.


    //from object to JSON 
    Gson gson = new Gson();
    gson.toJson(yourObject);

    // from JSON to object
    yourObject o = gson.fromJson(JSONString,yourObject.class);

  2. Но если вы просто хотите разобрать строку JSON и получить некоторые значения (или создать строку JSON с нуля для отправки по проводам), просто используйте JaveEE jar, который содержит JsonReader, JSONArray, JSONObject и т.д. Возможно, вы захотите загрузить реализацию этой спецификации, например javax.json. С помощью этих двух jar я могу анализировать json и использовать значения.


    Эти API на самом деле следуют модели синтаксического анализа XML DOM / SAX.


    Response response = request.get(); // REST call 
    JsonReader jsonReader = Json.createReader(new StringReader(response.readEntity(String.class)));
    JsonArray jsonArray = jsonReader.readArray();
    ListIterator l = jsonArray.listIterator();
    while ( l.hasNext() ) {
    JsonObject j = (JsonObject)l.next();
    JsonObject ciAttr = j.getJsonObject("ciAttributes");

Ответ 4

quick-анализатор JSON очень прост, гибок, очень быстр и настраиваем. Попробуйте

Характеристики:


  • Соответствует спецификации JSON (RFC4627)

  • Высокопроизводительный анализатор JSON

  • Поддерживает гибкий / настраиваемый подход к синтаксическому анализу

  • Настраиваемая проверка пар ключ / значение любой иерархии JSON

  • Простота в использовании # Очень маленький размер

  • Создает удобные для разработчика и легко отслеживаемые исключения

  • Подключаемая поддержка пользовательской проверки - ключи / значения могут быть проверены путем настройки пользовательских валидаторов по мере их появления

  • Поддержка валидирующих и неподтверждающих анализаторов

  • Поддержка двух типов конфигурации (JSON / XML) для использования анализатора с быстрой проверкой JSON

  • Требуется JDK 1.5

  • Отсутствие зависимости от внешних библиотек

  • Поддержка генерации JSON посредством сериализации объектов

  • Поддержка выбора типа коллекции в процессе синтаксического анализа

Это можно использовать следующим образом:

JsonParserFactory factory=JsonParserFactory.getInstance();
JSONParser parser=factory.newJsonParser();
Map jsonMap=parser.parseJson(jsonString);
java json