У меня есть следующий текст 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"
}
]
}
Ответы:
Библиотека org.json проста в использовании. Пример кода ниже:
Вы можете найти больше примеров из: Parse JSON на Java
Загружаемый jar: http://mvnrepository.com/artifact/org.json/json
источник
org.json
другие библиотеки для простого анализа JSON, даже не глядя. Это справочная библиотека, которую создал Дуглас Крокфорд (исследователь JSON).Для примера давайте предположим, что у вас есть класс
Person
только сname
.Google GSON ( Maven )
Мой личный фаворит относительно великолепной сериализации / десериализации объектов JSON.
Обновить
Если вы хотите получить один атрибут, вы можете легко сделать это с помощью библиотеки Google:
Org.JSON ( Maven )
Если вам не нужна десериализация объекта, а требуется просто получить атрибут, вы можете попробовать org.json ( или посмотрите пример GSON выше! )
Джексон ( Мавен )
источник
JsonNode
s, GSON имеет нечто подобное). Может быть хорошо показывать фрагменты, так как это похоже на единственный способ, который предлагает org.json.Если вы хотите создать объект Java из JSON и наоборот, используйте GSON или JACKSON сторонние файлы jar и т. Д.
Но если нужно просто проанализировать строку JSON и получить некоторые значения ((ИЛИ создать строку JSON с нуля для отправки по проводам), просто используйте JaveEE jar, который содержит JsonReader, JsonArray, JsonObject и т. Д. Вы можете загрузить реализацию этого спецификация как javax.json. С этими двумя банками я могу проанализировать JSON и использовать значения.
Эти API на самом деле следуют модели синтаксического анализа DOM / SAX XML.
источник
Парсер quick-json очень простой, гибкий, очень быстрый и настраиваемый. Попробуй это
Особенности:
Это можно использовать так:
источник
Вы можете использовать Google Gson .
Используя эту библиотеку, вам нужно только создать модель с той же структурой JSON. Затем модель автоматически заполняется. Вы должны вызывать свои переменные как ключи JSON или использовать,
@SerializedName
если хотите использовать разные имена.JSON
Из вашего примера:
модель
анализ
Теперь вы можете анализировать с помощью библиотеки Gson:
Gradle импорт
Не забудьте импортировать библиотеку в файл приложения Gradle
Автоматическая генерация моделей
Вы можете создать модель из JSON автоматически с помощью онлайн - инструментов , как это .
источник
Почти для всех приведенных ответов требуется полная десериализация JSON в объект Java перед получением значения в интересующем свойстве. Другой альтернативой, которая не идет по этому пути, является использование JsonPATH, которое похоже на XPath для JSON и позволяет обходить объекты JSON.
Это спецификация, и хорошие люди в JayWay создали реализацию Java для спецификации, которую вы можете найти здесь: https://github.com/jayway/JsonPath
Так что в основном, чтобы использовать его, добавьте его в свой проект, например:
и использовать:
так далее...
Проверьте страницу спецификации JsonPath для получения дополнительной информации о других способах прохождения JSON.
источник
A - Объяснение
Вы можете использовать библиотеки Джексона для привязки JSON String к экземплярам POJO ( Plain Old Java Object ). POJO - это просто класс с только закрытыми полями и общедоступными методами получения / установки. Джексон собирается пересечь методы (используя отражение ) и отображает объект JSON в экземпляр POJO, когда имена полей класса соответствуют именам полей объекта JSON.
В вашем объекте JSON, который на самом деле является составным объектом, основной объект состоит из двух подобъектов. Итак, наши классы POJO должны иметь одинаковую иерархию. Я назову весь объект JSON как объект страницы . Объект Page состоит из объекта PageInfo и массива объектов Post .
Таким образом, мы должны создать три разных класса POJO;
Единственный пакет, который я использовал, это Jackson ObjectMapper, мы делаем привязку данных;
Необходимые зависимости jar-файлов перечислены ниже;
Вот необходимый код;
B - Основной класс POJO: Страница
C - Детский класс POJO: PageInfo
D - Детский класс POJO: Post
E - Образец JSON-файла: sampleJSONFile.json
Я просто скопировал ваш пример JSON в этот файл и поместил его в папку проекта.
F - Демо-код
G - Демонстрационный выход
источник
Используйте minimal-json, который очень быстрый и простой в использовании. Вы можете анализировать из String obj и Stream.
Образец данных:
Синтаксический:
Создание JSON:
Maven:
источник
Я считаю, что лучшая практика должна состоять в том, чтобы пройти через официальный Java JSON API, который все еще находится в стадии разработки.
источник
Поскольку никто еще не упомянул об этом, вот начало решения с использованием Nashorn (JavaScript-часть Java 8, но не рекомендуется в Java 11).
Решение
Сравнение производительности
Я написал контент JSON, содержащий три массива по 20, 20 и 100 элементов соответственно. Я только хочу получить 100 элементов из третьего массива. Я использую следующую функцию JavaScript для анализа и получения своих записей.
Выполнение вызова миллион раз с помощью Nashorn занимает 7,5 ~ 7,8 секунд
org.json занимает 20 ~ 21 секунд
Джексон занимает 6,5 ~ 7 секунд
В этом случае Джексон работает лучше, чем Nashorn, который работает намного лучше, чем org.json. API Nashorn сложнее в использовании, чем в org.json или Jackson's. В зависимости от ваших требований Джексон и Нашорн могут быть жизнеспособными решениями.
источник
"
"? Не дюймов? Это секунды? Минуты?ScriptEngine engine = new ScriptEngineManager().getEngineByName("JavaScript"); engine.eval("var fun = function(raw) { return JSON.parse(raw); };"); Map<String, Object> json = (Map<String, Object>) ((Invocable) engine).invokeFunction("fun", jsonString);
В приведенном ниже примере показано, как прочитать текст вопроса, представленный в виде переменной «jsonText». В этом решении используется API Java EE7 javax.json (который упоминается в некоторых других ответах). Причина, по которой я добавил его в качестве отдельного ответа, заключается в том, что следующий код показывает, как на самом деле получить доступ к некоторым значениям, показанным в вопросе. Для выполнения этого кода потребуется реализация API javax.json . Полный пакет для каждого из необходимых классов был включен, так как я не хотел объявлять операторы import.
Теперь, прежде чем кто-то пойдет и понизит этот ответ, потому что он не использует GSON, org.json, Jackson или любые другие доступные сторонние фреймворки, это пример «необходимого кода» в вопросе для анализа предоставленного текста. Мне хорошо известно, что соблюдение текущего стандарта JSR 353 не рассматривалось для JDK 9, и поэтому спецификацию JSR 353 следует рассматривать так же, как и любую другую реализацию обработки JSON сторонних производителей.
источник
Это поразило меня тем, как легко это было. Вы можете просто передать
String
удержание вашего JSON в конструктор JSONObject в стандартном пакете org.json.Выполнено. Сбрасывает микрофон . Это работает
JSONObjects
также. После этого вы можете просто просмотреть иерархиюObjects
использованияget()
методов ваших объектов.источник
JSONArray
Тип не является частью API J2SE JDK и не сказать, API или библиотеки сторонних производителей обеспечивает этот тип.В Java доступно много библиотек JSON.
Наиболее известные из них: Джексон, GSON, Genson, FastJson и org.json.
Как правило, есть три вещи, на которые следует обратить внимание при выборе любой библиотеки:
В частности, для библиотек JSON (и любых библиотек сериализации / десериализации) связывание данных также обычно представляет интерес, поскольку устраняет необходимость написания стандартного кода для упаковки / распаковки данных.
Для 1, смотрите этот тест: https://github.com/fabienrenaud/java-json-benchmark Я сделал с помощью JMH, который сравнивает (Джексон, GSON, GENSON, FastJSON, ORG.JSON, JSONP) производительность сериализаторов и десериализаторов с использованием потока и API привязки данных. Для 2 вы можете найти множество примеров в Интернете. Вышеприведенный тест также может быть использован в качестве источника примеров ...
Быстрый тест: Джексон работает в 5-6 раз лучше, чем org.json, и более чем в два раза лучше, чем GSON.
Для вашего конкретного примера следующий код декодирует ваш JSON с Джексоном:
Дайте знать, если у вас появятся вопросы.
источник
В дополнение к другим ответам я рекомендую этот онлайн-сервис jsonschema2pojo.org с открытым исходным кодом для быстрой генерации классов Java из схемы json или json для GSON, Jackson 1.x или Jackson 2.x. Например, если у вас есть:
Jsonschema2pojo.org для GSON генерируется:
источник
Если у вас есть некоторый класс Java (скажем, Message), представляющий строку JSON (jsonString), вы можете использовать библиотеку JSON Jackson с:
и из объекта сообщения вы можете получить любой его атрибут.
источник
Gson легко выучить и реализовать, нам нужно знать следующие два метода
toJson () - конвертировать объект Java в формат JSON
fromJson () - конвертировать JSON в объект Java
`
`
источник
Существует много библиотек с открытым исходным кодом для анализа содержимого JSON объекта или просто для чтения значений JSON. Ваше требование - просто читать значения и анализировать их для пользовательского объекта. Так что в вашем случае достаточно библиотеки org.json.
Используйте библиотеку org.json для ее анализа и создания JsonObject:
Теперь используйте этот объект, чтобы получить ваши значения:
Вы можете увидеть полный пример здесь:
Как разобрать JSON в Java
источник
Пожалуйста, сделайте что-то вроде этого:
источник
Вы можете использовать библиотеку Gson для анализа строки JSON.
Вы также можете перебрать массив «posts» следующим образом:
источник
источник
Прочитайте следующий пост в блоге, JSON на Java .
Этот пост немного староват, но все же я хочу ответить на ваш вопрос.
Шаг 1: Создайте класс POJO из ваших данных.
Шаг 2: Теперь создайте объект, используя JSON.
Для дальнейшего ознакомления вы можете обратиться по следующей ссылке .
источник
Лучшие ответы на этой странице используют слишком простые примеры, такие как объект с одним свойством (например, {name: value}). Я думаю, что этот простой, но реальный пример может кому-то помочь.
Итак, это JSON, возвращаемый Google Translate API:
Я хочу получить значение атрибута "translationText", например, "Arbeit", используя Google Gson.
Два возможных подхода:
Получить только один необходимый атрибут
Создать объект Java из JSON
...
источник
Сначала вам нужно выбрать библиотеку реализации .
Java API для обработки JSON (JSR 353) обеспечивает переносимые API - интерфейсы для синтаксического анализа, генерации, преобразования и JSON запросов с использованием объектной модели и потокового API.
Эталонная реализация здесь: https://jsonp.java.net/
Здесь вы можете найти список реализаций JSR 353:
Какие API, которые реализуют JSR-353 (JSON)
И чтобы помочь вам решить ... Я также нашел эту статью:
http://blog.takipi.com/the-ultimate-json-library-json-simple-vs-gson-vs-jackson-vs-json/
Если вы идете за Джексоном, вот хорошая статья о преобразовании между JSON в / из Java с использованием Джексона: https://www.mkyong.com/java/how-to-convert-java-object-to-from-json- джексон /
Надеюсь, поможет!
источник
Вы можете использовать Jayway JsonPath . Ниже приведена ссылка на GitHub с исходным кодом, подробностями о pom и хорошей документацией.
https://github.com/jayway/JsonPath
Пожалуйста, следуйте инструкциям ниже.
Шаг 1 : Добавьте зависимость пути JSON Jayway в путь к классу с помощью Maven или загрузите файл JAR и добавьте его вручную.
Шаг 2 : Пожалуйста, сохраните ваш входной JSON как файл для этого примера. В моем случае я сохранил ваш JSON как sampleJson.txt. Обратите внимание, что вы пропустили запятую между pageInfo и сообщениями.
Шаг 3 : Считайте содержимое JSON из вышеуказанного файла, используя bufferedReader, и сохраните его как String.
Шаг 4 : проанализируйте вашу строку JSON с помощью Jayway JSON parser.
Шаг 5 : Прочитайте детали как ниже.
Выход будет :
источник
У меня есть JSON, как это:
Класс Java
Код для преобразования этого JSON в класс Java.
специалист
источник
Можно использовать аннотацию Apache @Model для создания классов модели Java, представляющих структуру файлов JSON, и использовать их для доступа к различным элементам в дереве JSON . В отличие от других решений, это работает полностью без размышлений и поэтому подходит для условий, где отражение невозможно или сопровождается значительными накладными расходами.
Существует пример проекта Maven, показывающий использование. Прежде всего это определяет структуру:
и затем он использует сгенерированные классы RepositoryInfo и Owner для анализа предоставленного входного потока и получения определенной информации при этом:
Вот и все! В дополнение к этому здесь приведен живой пример, показывающий аналогичный пример вместе с асинхронным сетевым взаимодействием.
источник
jsoniter
(jsoniterator) - относительно новая и простая библиотека json, разработанная, чтобы быть простой и быстрой. Все, что вам нужно сделать для десериализации данных JSON, этогде
jsonData
строка данных JSON.Проверьте официальный сайт для получения дополнительной информации.
источник
Мы можем использовать класс JSONObject для преобразования строки JSON в объект JSON и для итерации по объекту JSON. Используйте следующий код.
источник
Вы можете использовать библиотеку разбора потока DSM для разбора сложных документов json и XML. DSM анализирует данные только один раз и не загружает все данные в память.
Допустим, у нас есть класс Page для десериализации данных JSON.
Класс страницы
Создайте файл сопоставления yaml.
Используйте DSM для извлечения полей.
переменная страницы, сериализованная в json:
DSM очень хорош для сложных JSON и XML.
источник
Вы можете использовать
JsonNode
для структурированного представления дерева вашей строки JSON. Это часть библиотеки Rock Solid Jackson, которая вездесуща.источник