Как записать в json-файл java

Обновлено: 21.11.2024

В моей предыдущей статье мы узнали, как читать файл JSON в Java, теперь давайте посмотрим, как мы можем записать объект JSON в файл в Java. Здесь также мы будем использовать библиотеку JSON.simple, загрузите json-simple-1.1.1.jar (или), если вы работаете на maven, добавьте приведенную ниже зависимость в ваш pom.xml


Давайте попробуем создать тот же JSON, который мы использовали в нашем предыдущем примере (sample.json), который будет иметь следующее содержимое.

Содержимое файла JSON (sample.json)

Другие публикации, которые могут вам понравиться…

  • Jackson 2 JSON Parser — преобразование JSON в/из объекта Java
  • Как преобразовать JSON в/из карты Java с помощью JACKSON
  • Пример модели дерева Джексона — JsonNode
  • Пример API потоковой передачи Джексона | Чтение и запись JSON
  • Пример Джексона JSON | ObjectMapper и @JSONView
  • Как преобразовать JSON в/из объекта Java с помощью Boon JSON Parser
  • Как читать и записывать JSON с помощью GSON
  • Как записать объект JSON в файл на Java?
  • Как читать файл JSON в Java — JSONObject и JSONArray
  • Учебное пособие по JSON для Джерси Джексон
  • Пример Spring REST Hello World — ответы JSON и XML
  • Как преобразовать объект Java в JSON с помощью JAXB
  • Пример JAX-RS REST @Consumes XML и JSON
  • JAX-RS REST @Создает как XML, так и пример JSON

Как записать объект JSON в файл?

Мы выполним следующие шаги, чтобы записать объект JSON в файл на Java

  • Создайте новый объект для JSONObject, используя метод put() объекта jsonObject, добавив в него пары ключей и значений.
  • Создайте новый объект для JSONArray, чтобы добавить список стран, с помощью метода add() добавьте в него страны.
  • Теперь добавьте jsonArray в jsonObject
  • Наконец, создайте новый объект для FileWriter и с помощью метода write() запишите jsonObject в файл.

Вывод:

Когда мы откроем файл sample.json, в нем будет записан JSON.

Комментарии

На самом деле я пытался записать json в файл, используя приведенный выше код, но он создает только файл, данные отсутствуют в файле, даже он не выдает ошибки и т. д.

JSON.simple — это облегченная библиотека обработки JSON, которую можно использовать для чтения и записи файлов и строк JSON. Закодированный/декодированный JSON будет полностью соответствовать спецификации JSON (RFC4627).

Библиотека JSON.simple довольно старая и не обновлялась с марта 2012 года. Библиотека Google GSON — хороший вариант для чтения и записи JSON.

В этом руководстве по Java JSON мы сначала рассмотрим краткий пример записи в файл JSON, а затем прочитаем JSON из файла.

1. Возможности JSON.simple

  • Полное соответствие спецификации JSON (RFC4627).
  • Поддерживает кодирование, декодирование/анализ и экранирование JSON.
  • Простота использования за счет повторного использования интерфейсов карты и списка.
  • Поддерживает потоковый вывод текста JSON.
  • Высокая производительность.
  • Нет зависимости от внешних библиотек.

2. Json.simple Maven

Обновите файл pom.xml с помощью зависимости json-simple maven.

3. Запишите JSON в файл

Чтобы записать тест JSON в файл, мы будем работать в основном с двумя классами:

  1. JSONArray: для записи данных в массивы json. Используйте его метод add() для добавления объектов типа JSONObject .
  2. JSONObject: для записи объектов json. Используйте его метод put() для заполнения полей.

После заполнения вышеуказанных объектов используйте экземпляр FileWriter для записи файла JSON.

4. Чтение JSON из файла

Чтобы прочитать JSON из файла, мы будем использовать файл JSON, созданный в предыдущем примере.

  1. Прежде всего мы создадим экземпляр JSONParser для анализа файла JSON.
  2. Используйте FileReader, чтобы прочитать файл JSON и передать его синтаксическому анализатору.
  3. Начните читать объекты JSON один за другим в зависимости от их типа, т. е. JSONArray и JSONObject .

Был ли этот пост полезен?

Рекомендуемое чтение:

6 мыслей о «JSON.simple — чтение и запись JSON»

Я следовал именно так, как вы упомянули в статье. но получал ошибки. ниже приведен фрагмент кода

следующие журналы ошибок

Исключение в «основном» потоке java.lang.StackOverflowError
в java.base/java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:748)
в java.base/java.lang. StringBuffer.append(StringBuffer.java:424)
в org.json.simple.JSONValue.escape(JSONValue.java:266)
в org.json.simple.JSONObject.toJSONString(JSONObject.java: 116)
на org.json.simple.JSONObject.toJSONString(JSONObject.java:101)
в org.json.simple.JSONObject.toJSONString(JSONObject.java:108)
…..
и аналогичный длинный список ошибок

Пришлось внести некоторые изменения для его компиляции, а именно:

вместо прямого приведения, как показано в примере здесь

Я следовал приведенному выше примеру, но JSON, записанный в файл, не имеет отступов. Я что-то не так делаю?

Большое спасибо!

Здравствуйте,
Как обновить только одно значение сущности в файле json?
Например,
у меня есть файл json со всеми данными в нем, и
мне нужно изменить «имя»: «локеш»
на какое-то другое значение, которое хранится в строке.
Как я могу просто записать это значение в свой файл json с помощью java
Пожалуйста, помогите.
Спасибо

Здравствуйте, как мне это сделать с файлом json размером 500 ГБ (wikidata)?

Как можно проанализировать объект FileReader? Что такое объект FileReader?
Для сравнения, я хочу прочитать файл JSON, затем преобразовать его в строку, тогда я знаю, как с ним работать, но мой метод синтаксического анализа не использует FileReader.

В этом руководстве я покажу вам, как записывать данные JSON в файл с помощью JSON.simple .

JSON.simple – это простой инструментарий Java для работы с JSON. Вы можете использовать JSON.simple для кодирования или декодирования текста JSON.

Особенности:

  • Полное соответствие спецификации JSON (RFC4627) и надежность (см. тестирование на соответствие)
  • Обеспечивает множество функций, таких как кодирование, декодирование/анализ и экранирование текста JSON, сохраняя при этом легкость библиотеки.
  • Гибкость, простота и удобство использования за счет повторного использования интерфейсов карты и списка.
  • Поддерживает потоковый вывод текста JSON
  • Остановимый SAX-подобный интерфейс для потокового ввода парсера текста JSON (подробнее)
  • Высокая производительность (см. тестирование производительности)
  • Нет зависимости от внешних библиотек
  • И исходный код, и двоичный файл совместимы с JDK1.2

Вот содержимое файла1.txt:

Код Java:

В приведенном выше примере экземпляр FileWriter объявлен в операторе try-with-resource, он будет закрыт независимо от того, завершится ли оператор try нормально или внезапно. У вас нет catch IOException или нет необходимости упоминать блок finally.

Сравните код выше с кодом ниже с кодом try, catch, finally. Вышеприведенный код состоит всего из 4 строк по сравнению с 11 строками ниже.

Вывод:

Ссылка:

Загрузите JSON.simple отсюда.

Присоединиться к обсуждению

Если вам понравилась эта статья, поделитесь ею в социальных сетях. Остались вопросы по статье, оставьте нам комментарий.

Другие популярные статьи.

Попробуйте.

О App Shah

Подписаться на рассылку…

Будьте в курсе и никогда не пропустите обновления! Подпишитесь на новости, последние статьи и специальные предложения! Присоединяйтесь к 16+ миллионам читателей в месяц. 👋

Вы можете отказаться от подписки в любое время.

Основная боковая панель

Лучшие технические руководства

  • НОВОЕ Мои 3 лучших приложения для повышения производительности Mac и 10 настроек iPhone, которые нужно отключить прямо сейчас!
  • Самое простое руководство по Spring MVC Hello World и Spring Boot
  • НОВОЕ Как синхронизировать пользовательские папки с iCloud Drive? и создайте RESTful-сервис с помощью Jersey JAX-RS
  • 10 лучших интервью по Java, вопросы и ответы и сортировка HashMap по ключу и значению
  • Установка Ansible в Linux и состояние гонки в многопоточности Java
  • Реализовать класс LinkedList с нуля и Java-клиент Memcached

Основные технологии Java

Купон на скидку 10 %: CRUNCHIFY

Современный, безопасный и быстрый управляемый хостинг WordPress. Проверьте это.

Полезное руководство по WordPress

  • НОВИНКА Начните первый блог WordPress и 15 основных советов по оптимизации
  • Используйте .htaccess, чтобы ускорить работу WordPress и остановить загрузку ненужных файлов на сайт
  • 5 основных советов по поисковой оптимизации и важность исследования ключевых слов
  • Улучшенная очистка раздела заголовка WordPress и устранение проблемы с процессором cPanel
  • Форма Google как идеальная контактная форма WordPress и локальная загрузка шрифтов WordPress (советы по скорости)
  • 16 проверенных способов получить качественные обратные ссылки и лучшее обновление до PHP 7.1
  • НОВАЯ безопасная область входа в WordPress и скрытие партнерских ссылок без плагина WordPress

Советы по настройке Wordpress

Evernote — интеграция задач действительно меняет правила игры?…

Как использовать задачи Evernote, чтобы сосредоточиться. Вот вводное руководство по использованию Задач в …

10 настроек iPhone iOS, которые нужно отключить прямо сейчас!…

В этом руководстве мы рассмотрим список настроек iPhone или iOS, которые вы хотели бы отключить…

iCloud Drive — не удается включить папки «Рабочий стол» и «Документы»?…

Для вас папки iCloud Drive Desktop & Documents отображаются серым цветом на MacBook Pro? Ну…

Как прекратить передачу данных аналитики в Apple — смените iPhone,…

Когда вы активируете свой iPhone, iPhone или iPad по умолчанию передает большое количество аналитических данных в…

JavaScript Object Notation или сокращенно JSON — это формат обмена данными, который был представлен в 1999 году и получил широкое распространение в середине 2000-х годов. В настоящее время это де-факто стандартный формат для связи между веб-сервисами и их клиентами (браузерами, мобильными приложениями и т. д.). Умение читать и писать на нем — важный навык для любого разработчика программного обеспечения.

Несмотря на то, что JSON был создан на основе JavaScript, это формат, не зависящий от платформы. Вы можете работать с ним на нескольких языках программирования, включая Java, Python, Ruby и многие другие. На самом деле любой язык, который может анализировать строку, может обрабатывать JSON.

Популярность JSON привела к его встроенной поддержке многими базами данных, последние версии PostgreSQL и MySQL содержат встроенную поддержку запросов к данным, хранящимся в полях JSON. Базы данных NoSQL, такие как MongoDB, были созданы на основе этого формата и используют документы JSON для хранения записей, так же как таблицы и строки хранят записи в реляционной базе данных.

Одним из основных преимуществ JSON по сравнению с форматом данных XML является размер документа. Поскольку JSON не содержит схем, нет необходимости носить с собой огромные структурные накладные расходы, такие как пространства имен и оболочки.

JSON – это общий формат данных, который имеет шесть типов данных:

Давайте рассмотрим простой документ JSON:

Эта структура определяет объект, представляющий человека по имени «Бенджамин Уотсон». Здесь мы можем увидеть его данные, такие как возраст, семейное положение и хобби.

По сути, объект JSON представляет собой не что иное, как строку. Строка, представляющая объект, поэтому объекты JSON часто называют строками JSON или документами JSON.

json-простой

Поскольку в Java нет встроенной поддержки JSON, в первую очередь мы должны добавить новую зависимость, которая предоставила бы ее нам. Для начала воспользуемся модулем json-simple, добавив его как зависимость от Maven.

Этот модуль полностью соответствует спецификации JSON RFC4627 и обеспечивает основные функции, такие как кодирование и декодирование объектов JSON, и не зависит от внешних модулей.

Давайте создадим простой метод, который будет принимать имя файла в качестве параметра и записывать жестко заданные данные JSON:

Здесь мы создаем экземпляр класса JSONObject, указав имя и возраст в качестве свойств. Затем мы создаем экземпляр класса JSONArray, добавляя два строковых элемента и помещая их в качестве третьего свойства нашего sampleObject. В конечном итоге мы преобразуем sampleObject в документ JSON, вызывая метод toJSONString() и записывая его в файл.

Чтобы запустить этот код, мы должны создать точку входа в наше приложение, которая может выглядеть следующим образом:

В результате выполнения этого кода мы получим файл с именем example.json в корне нашего пакета. Содержимое файла будет документом JSON со всеми заданными свойствами:

Отлично! У нас только что был первый опыт работы с форматом JSON, и мы успешно сериализовали в него объект Java и записали его в файл.

Теперь, немного изменив наш исходный код, мы можем прочитать объект JSON из файла и вывести его на консоль либо полностью, либо распечатать выбранные отдельные свойства:

Важно отметить, что метод parse() возвращает объект, и мы должны явно привести его к JSONObject .

Если у вас есть искаженный или поврежденный документ JSON, вы получите исключение, похожее на это:

Чтобы имитировать это, попробуйте удалить последнюю закрывающую скобку > .

Копаем глубже

Несмотря на то, что json-simple полезен, он не позволяет нам использовать пользовательские классы без написания дополнительного кода. Предположим, у нас есть класс, представляющий человека из нашего исходного примера:

Возьмем документ JSON, который мы использовали в качестве примера в начале, и поместим его в файл example.json:

Нашей задачей будет десериализация этого объекта из файла в экземпляр класса Person. Сначала попробуем сделать это с помощью простого json.

Изменение нашего метода main(), повторное использование статического readSimpleJsonDemo() и добавление необходимых импортов, к которым мы доберемся:

Выглядит не очень, у нас много странных типов, но, кажется, со своей задачей справляется, верно?

Бесплатная электронная книга: Git Essentials

Ознакомьтесь с нашим практическим руководством по изучению Git, включающим передовые практики, общепринятые стандарты и памятку. Перестаньте гуглить команды Git и на самом деле изучите их!

Ну, не совсем.

Попробуем вывести в консоль массив kids нашего Person, а затем возраст первого ребенка.

Как мы видим, первый вывод консоли показывает, казалось бы, хороший результат:

но второй выдает исключение:

Проблема здесь в том, что наше приведение типа к списку не создало два новых объекта Person, а просто вставило то, что там было — JSONObject в нашем текущем случае. Когда мы попытались копнуть глубже и узнать фактический возраст первого ребенка, мы столкнулись с ClassCastException .

Это большая проблема, и я уверен, что вы сможете решить ее, написав кучу очень умного кода, которым вы могли бы гордиться, но есть простой способ сделать это правильно с самого начала.

Джексон

Библиотека, которая позволит нам делать все это очень эффективно, называется Jackson. Он очень распространен и используется в крупных корпоративных проектах, таких как Hibernate.

Давайте добавим его как новую зависимость Maven:

Основной класс, который мы будем использовать, называется ObjectMapper. Он имеет метод readValue(), который принимает два аргумента: источник для чтения и класс для приведения результата.

ObjectMapper можно настроить с помощью ряда различных параметров, передаваемых в конструктор:

FAIL_ON_SELF_REFERENCES Функция, которая определяет, что происходит, когда POJO обнаруживает прямую ссылку на себя (и для нее не включена обработка идентификатора объекта): либо JsonMappingException брошено (если верно) или ссылка нормально обрабатывается (ложь).
INDENT_OUTPUT Функция, которая позволяет включать (или отключать) отступ для базового Генератор с использованием красивого принтера по умолчанию, настроенного для ObjectMapper (и ObjectWriters, созданных из mapper).
ORDER_MAP_ENTRIES_BY_KEYES Функция, которая определяет, сортируются ли записи карты в первую очередь по перед сериализацией или нет: если включено, при необходимости выполняется дополнительный шаг сортировки (не обязательно для SortedMaps), если отключено, дополнительная сортировка не требуется.
USE_EQUALITY_FOR_OBJECT_ID Функция, которая определяет, сравнивается ли идентификатор объекта с использованием истинного идентификатора объекта на уровне JVM (false); или метод equals().

К сожалению, после запуска этого фрагмента кода мы получим исключение:

Судя по всему, нам нужно добавить конструктор по умолчанию в класс Person:

Повторно запустив код, мы увидим еще одно всплывающее исключение:

Это немного сложнее решить, так как сообщение об ошибке не говорит нам, что делать для достижения желаемого результата. Игнорировать это свойство нецелесообразно, поскольку оно явно присутствует в документе JSON и мы хотим, чтобы оно было переведено в результирующий объект Java.

Проблема здесь связана с внутренней структурой библиотеки Джексона. Он получает имена свойств от геттеров, удаляя их первые части. В случае с getAge() и getName() это работает отлично, но с isMarried() это не так, и предполагается, что поле должно называться женатым, а не isMarried .

Грубый, но работающий вариант — мы можем решить эту проблему, просто переименовав геттер в isIsMarried . Давайте попробуем это сделать.

Исключения больше не появляются, и мы видим желаемый результат!

Хотя результат удовлетворителен, есть лучший способ обойти это, чем добавление еще одного is к каждому из ваших логических методов получения.

Того же результата можно добиться, добавив аннотацию к методу isMarried():

Таким образом, мы явно сообщаем Джексону имя поля, и ему не нужно угадывать. Это может быть особенно полезно в тех случаях, когда имя поля полностью отличается от имени геттера.

Заключение

JSON – это упрощенный текстовый формат, который позволяет нам представлять объекты и передавать их по сети или сохранять в базе данных.

В Java нет встроенной поддержки манипулирования JSON, однако есть несколько модулей, обеспечивающих эту функцию. В этом руководстве мы рассмотрели модули json-simple и Jackson, показав сильные и слабые стороны каждого из них.

При работе с JSON следует учитывать нюансы модулей, с которыми вы работаете, и тщательно отлаживать возникающие исключения.

JSON (нотация объектов JavaScript) – это легкий, удобочитаемый и независимый от языка формат обмена данными. Созданный в начале 2000-х на основе JavaScript, JSON быстро стал де-факто стандартным форматом для обмена данными между серверами и клиентами.

JSON имеет только две структуры данных: объекты и массивы. Объект — это неупорядоченный набор из нуля или более пар ключ-значение. Массив — это список из нуля или более значений. Значения могут быть строками, числами, логическими значениями, нулевыми значениями, вложенными объектами и массивами.

Почти все языки программирования, включая Java, Python, Node.js, JavaScript и Ruby, предоставляют код для создания и анализа данных JSON. В этой статье вы узнаете, как читать и писать JSON в Java.

Давайте создадим простой файл JSON, содержащий один объект, описывающий клиента, как показано ниже:

К сожалению, в Java нет собственной библиотеки для обработки JSON. В этой статье мы рассмотрим некоторые из лучших библиотек с открытым исходным кодом, доступных для создания и анализа JSON в Java.

JSON.simple — это простая библиотека для обработки данных JSON в Java. Он позволяет читать, записывать, анализировать и запрашивать JSON в полном соответствии со спецификациями JSON (RFC4627).

Чтобы добавить JSON.simple в проект Gradle, добавьте следующую зависимость в файл build.gradle:

Для Maven включите следующую зависимость в файл pom.xml:

Вот пример, демонстрирующий использование библиотеки JSON.simple для записи данных JSON в файл:

Как видно выше, мы используем классы JsonObject и JsonArray для создания объекта клиента с личными данными, проектами, способами оплаты и многим другим. Класс JsonObject используется для создания объекта JSON с неупорядоченными парами ключ-значение. Класс JsonArray используется для создания массива JSON с несколькими объектами.

Теперь давайте прочитаем JSON из файла, который мы только что создали. JSON.simple предоставляет статический метод Jsoner.deserialize() для анализа файла JSON. Вот пример:

В приведенном выше примере мы создаем объект JsonObject путем явного приведения объекта, возвращаемого методом Jsoner.deserialize(). Затем мы считываем объекты JSON один за другим, приводя их к их фактическим типам данных.

Jackson — еще одна популярная библиотека Java для чтения и записи данных JSON. Джексон предоставляет класс ObjectMapper для преобразования объектов Java в их представление JSON. Его также можно использовать для преобразования объекта JSON обратно в эквивалентный объект Java.

Просто добавьте следующую зависимость в файл build.gradle вашего проекта Gradle, чтобы включить поддержку Джексона:

Для Maven добавьте следующую зависимость в файл pom.xml:

Примечание. Если вы хотите анализировать данные JSON в Spring Boot, ознакомьтесь с руководством по обработке данных JSON в Spring Boot.

ObjectMapper предоставляет метод writeValue() для преобразования объекта Java в строку JSON. В следующем примере показано, как использовать библиотеку Джексона для записи данных JSON в файл:

Как видно выше, мы используем метод writeValueAsString() для сериализации объекта карты в строку JSON. Сгенерированная строка JSON затем записывается в файл.

Чтение JSON из файла с помощью Jackson проще, чем с библиотекой JSON.simple. Класс ObjectMapper также можно использовать для построения иерархического дерева узлов из данных JSON. В модели дерева JSON вы можете получить доступ к определенному узлу и прочитать его значение. В древовидной модели каждый узел относится к типу JsonNode, который предоставляет разные методы для работы с определенными ключами.

Вот пример анализа файла customer.json с помощью библиотеки Jackson:

Gson — это еще одна библиотека Java, разработанная и поддерживаемая Google для преобразования объектов Java в их представление JSON. Вы также можете использовать его для преобразования строки JSON обратно в эквивалентный объект Java.

Gson предоставляет простые методы toJson() и fromJson(), которые можно использовать для простого преобразования объекта Java в формат JSON и из него.

Чтобы добавить Gson в свой проект Gradle, добавьте следующую зависимость в файл build.gralde:

Для Maven добавьте следующую зависимость в файл pom.xml:

В следующем примере показано, как использовать метод toJson() для преобразования коллекции Java в строку JSON и последующей записи ее в файл:

Приведенный выше код очень похож на код Джексона для записи JSON в файл. Единственное отличие состоит в том, что теперь мы используем метод toJson() из класса Gson для преобразования коллекции в строку JSON.

Мы можем использовать класс JsonParser, поставляемый с библиотекой Gson, для анализа только что созданного файла JSON. Вот пример:

Moshi — еще одна мощная библиотека JSON, созданная Square для Kotlin и Java. Это упрощает анализ JSON в объекты Java, а также преобразование объектов Java в их представление JSON. Moshi имеет встроенную поддержку чтения и записи основных типов данных Java, включая примитивы, коллекции, строки и перечисления.

Если вы хотите использовать Moshi в проекте Gradle, включите в файл build.gradle следующую зависимость:

Для Maven добавьте следующую зависимость в файл pom.xml:

Moshi предоставляет класс JsonWriter, который можно использовать для записи значения в формате JSON в поток, по одному маркеру за раз, как показано ниже:

Как видно выше, мы создали экземпляр JsonWriter для кодирования наших данных в формате JSON. Затем мы вызвали различные методы объекта записи, чтобы создать объект JSON с вложенными объектами и массивами.

Давайте воспользуемся классом JsonReader, предоставленным Moshi, для анализа JSON из файла. Он считывает значение кодировки JSON как поток токенов. Этот поток включает в себя как буквальные значения (строки, числа, логические значения и нули), так и начальные и конечные разделители объектов и массивов. Токены просматриваются в порядке глубины, в том же порядке, в котором они появляются в документе JSON. В объектах JSON пары "имя-значение" представлены одним токеном.

Вот пример:

Это все, что нужно для чтения и записи файлов JSON в Java. В Java нет собственных библиотек для эффективной обработки данных JSON.

В этой статье я рассмотрел четыре различные библиотеки с открытым исходным кодом для чтения, записи и анализа данных JSON в Java. Эти библиотеки включают JSON.simple, Jackson, Gson и Moshi.

Какая библиотека JSON лучшая? Лично я использую и рекомендую Джексона. Это набор инструментов обработки данных для Java, которые можно использовать для анализа не только JSON, но и других форматов данных, таких как CSV, XML, YAML и т. д.

Если вы хотите читать и писать XML, ознакомьтесь с учебным пособием Чтение и запись XML в Java.

✌️ Понравилась статья? Следите за мной в Twitter и LinkedIn. Вы также можете подписаться на RSS-канал.

Читайте также: