Как преобразовать json в объект java
Перейти к содержимому

Как преобразовать json в объект java

Converting JSON data to Java object

I want to be able to access properties from a JSON string within my Java action method. The string is available by simply saying myJsonString = object.getJson() . Below is an example of what the string can look like:

In this string every JSON object contains an array of other JSON objects. The intention is to extract a list of IDs where any given object possessing a group property that contains other JSON objects. I looked at Google’s Gson as a potential JSON plugin. Can anyone offer some form of guidance as to how I can generate Java from this JSON string?

user avatar

13 Answers 13

I looked at Google’s Gson as a potential JSON plugin. Can anyone offer some form of guidance as to how I can generate Java from this JSON string?

Google Gson supports generics and nested beans. The [] in JSON represents an array and should map to a Java collection such as List or just a plain Java array. The <> in JSON represents an object and should map to a Java Map or just some JavaBean class.

You have a JSON object with several properties of which the groups property represents an array of nested objects of the very same type. This can be parsed with Gson the following way:

Fairly simple, isn’t it? Just have a suitable JavaBean and call Gson#fromJson() .

See also:

    — Introduction to JSON — Introduction to Gson

Bewaaaaare of Gson! It’s very cool, very great, but the second you want to do anything other than simple objects, you could easily need to start building your own serializers (which isn’t that hard).

Also, if you have an array of Objects, and you deserialize some json into that array of Objects, the true types are LOST! The full objects won’t even be copied! Use XStream.. Which, if using the jsondriver and setting the proper settings, will encode ugly types into the actual json, so that you don’t loose anything. A small price to pay (ugly json) for true serialization.

Note that Jackson fixes these issues, and is faster than GSON.

user avatar

Oddly, the only decent JSON processor mentioned so far has been GSON.

Here are more good choices:

    (Github) — powerful data binding (JSON to/from POJOs), streaming (ultra fast), tree model (convenient for untyped access) — highly configurable serialization

One more to consider:

    — functionality similar to Jackson, aimed to be easier to configure by developer

user avatar

Or with Jackson:

user avatar

Easy and working java code to convert JSONObject to Java Object

Employee.java

LoadFromJSON.java

user avatar

If, by any change, you are in an application which already uses http://restfb.com/ then you can do:

user avatar

user avatar

If you use any kind of special maps with keys or values also of special maps, you will find it’s not contemplated by the implementation of google.

Depending on the input JSON format(string/file) create a jSONString. Sample Message class object corresponding to JSON can be obtained as below:

user avatar

user avatar

What’s wrong with the standard stuff?

Give boon a try:

It is wicked fast:

Don’t take my word for it. check out the gatling benchmark.

(Up to 4x is some cases, and out of the 100s of test. It also has a index overlay mode that is even faster. It is young but already has some users.)

It can parse JSON to Maps and Lists faster than any other lib can parse to a JSON DOM and that is without Index Overlay mode. With Boon Index Overlay mode, it is even faster.

It also has a very fast JSON lax mode and a PLIST parser mode. 🙂 (and has a super low memory, direct from bytes mode with UTF-8 encoding on the fly).

It also has the fastest JSON to JavaBean mode too.

It is new, but if speed and simple API is what you are looking for, I don’t think there is a faster or more minimalist API.

Converting JSON to/from Java Objects using JACKSON API

This post explains Jackson data-binding , which is a common approach when dealing with JSON using Jackson API in your Java projects. Let’s get going.

ObjectMapper is the main api used for data-binding. It comes with several reader/writer methods to preform the conversion from/to Java and JSON

Typical usages are as follows:

Complete Example

Step 1: Include JACKSON dependency in pom.xml

There are several jar in JACKSON library. For this example, we are only using databind.

Step 2: Create POJO’s

These object will be converted to and from JSON.

Step 3: Convert Java Object to JSON and write JSON to a file

Convert CarFleet object into JSON and write that JSON to a file

Run above program. Following is the output written in file result.json

Pretty print JSON

Note that above output is not very readable. But you can Pretty Print JSON using writerWithDefaultPrettyPrinter factory method of ObjectMapper. Toggle the comments in above program and run it.

Step 4: Read JSON from a file and convert into Java Object

Read JSON string from a file and convert into CarFleet object.

Following is the output:

That’s it. In the next post we will learn how Json can be mapped to Java Maps.

If you like tutorials on this site, why not take a step further and connect me on Facebook , Google Plus & Twitter as well? I would love to hear your thoughts on these articles, it will help improve further our learning process.

Related posts:

Recent Posts

  • Spring Boot + AngularJS + Spring Data + JPA CRUD App Example
  • Spring Boot Rest API Example
  • Spring Boot WAR deployment example
  • Spring Boot Introduction + hello world example
  • Secure Spring REST API using OAuth2

We use cookies to personalize content and ads, to provide the best browsing experience possible, to provide social media features and to analyse our traffic. We also share information about your USAGE OF OUR SITE with our social media, advertising and analytics partners. We do not store any user details. When user contacts us using contact-form (that’s the only possibility) on this website, the user’s email is used only to reply him/her back, and never shared with any third party. We do not use any mass-mailing. Hence we strongly believe to be in accordance with GDPR compliance as well. By continuing to use the site, you agree to the use of cookies. more information Accept

The cookie settings on this website are set to «allow cookies» to give you the best browsing experience possible. Please note that we do not store any user details. When user contacts us using contact-form (that’s the only possibility) on this website, the user’s email is used only to reply him/her back, and never shared with any third party. We do not use any mass-mailing. Hence we strongly believe to be in accordance with GDPR compliance as well. If you continue to use this website without changing your cookie settings or you click «Accept» below then you are consenting to this. Please also look at How Google uses cookies to learn even more.

Работа с JSON на Java (библиотека GSON)

Заметка взята с сайта Javenue, так как несет много полезной информации. Спасибо ее автору.
Заметка была дополнена, поэтому если обнаружатся неточности — прошу писать мне.

JSON, что означает JavaScript Object Notation, — это текстовый формат обмена данными, который легко читается человеком и в то же время является компактным (в отличии от того же XML формата).

По сути это набор пар “ключ-значение”, объединенных в последовательность значений(массив). Допустим мы производим выборку информацию о заказчике из БД и возвращаем сведения о нем. Пример строки в формате JSON будет выглядеть так:

Вообще, о самом формате JSON в Интернете написано более чем достаточно, ну а в этой статье я хочу рассмотреть бибилиотеку Gson для сериализации и десериализации java объектов в JSON.

1 Обзор библиотеки Gson

Gson — это небольшая java библиотека, которая позволяет конвертировать java объекты в их JSON представление, равно как и создавать объекты на основании их json представления.

Изначально Gson был разработан в Google и использовался в нескольких внтуренних проектах. Через некоторое время было принято решение отдать библиотеку в open-source, чтобы она и дальше развивалась.

1.1 Подключение GSON

Сначала подключим библиотеку. Если вы используете в качестве сборщика Gradle, добавьте новую зависимость:

Вот, что нужно прописать в файл pom.xml тем, кто использует Maven:

1.2 Использование GSON

Основным классом библиотеки есть одноименный класс Gson. Для того, чтобы создать экземпляр класса нужно воспользоваться одним из двух способов:

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

Основные методы, которые используются для сериализации и десериализации java-объектов, называются toJson и fromJson .

2 Сериализация и десериализация в Gson

Начнем с чего-нибудь попроще:

Это так называемы примитивы JSON. А вот так их можно десериализовать:

Так как инстанс Gson не имеет внутреннего состояния, то его можно переиспользовать произвольное количество раз, а так же использовать в многопоточных приложениях.

Идем дальше. Вот таким образом можно сериализовать и десеарелизовать массив:

С объектами, которые в качестве полей содержат строки и примитивы, все тоже достаточно просто. Допустим, у нас в приложении описан следующий класс:

И экземпляр класса созданный таким способом:

Смотрим, что получается:

Обратите внимание, что при сериализации значение поля random не было сохранено. Все дело в том, что поведение библиотеки по-умолчанию не сериализует поля, помеченные модификатором transient . О том, как изменить это поведение, читайте в разделе про GsonBuilder .

3 Работа с коллекциями

Сериализация коллекций, таких как ArrayList, LinkedList, HashSet, TreeMap и других, реализована таким образом:

  • метод toJson для Collection вернет массив объектов или примитивов;
  • метод toJson для Map вернет ассоциативный массив.

С десериализацией все немного сложнее. Рассмотрим следующий пример:

Обратите внимание как мы определили тип для коллекции при десериализации. К сожалению, сделать это как-то проще не получится.

Допустим, вам необходимо конвертировать коллекцию, содержащую объекты различных типов. В этом случае с сериализацией проблем не возникнет, например:

А вот десереализовать такую коллекцию не получится, так как Gson не сможет найти правильные соответствия для типов данных.

Одним из самых хороших решений этой проблемы будет использование низкоуровневого API — классы JsonElement, JsonPrimitive, JsonObject и так далее. Некоторое представление о том, как это сделать, вы сможете получить в следующем разделе статьи.

4 Определяем свои правила конвертации объектов

Gson позволяет разработчикам определять свои собственные правила для сериализации и десериализации объектов. Зарегистрировать их можно с помощью метода registerTypeAdapter() .

Допустим, у нас в приложении есть следующий класс:

Для кастомного сериализатора необходимо реализовать интерфейс JsonSerializer , а для десериализаторв — соответственно JsonDeserializer . Для простоты можно создать один класс, который реализует оба эти интерфейса:

Зарегистрировать наш класс можно следующим образом:

5 Настройки Gson и класс GsonBuilder

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

Метод setPrettyPrinting у класса GsonBuilder меняет это поведение и сериализует объекты в удобную для человека форму с пробелами и переводами строк. Пример вы можете посмотреть по ссылке приведенной в начале статьи.

Еще одна полезная настройка для GsonBuilder — excludeFieldsWithModifiers . Она позволяет изменить набор несериализуемых полей при конвертации java объектов в JSON. По умолчанию игнорируются только поля с модификатором transient .

6 Пример использования GSON

Нам надо преобразовать данные JSON в Java-объект. Пусть у нас имеется класс Student , представляющий заказчика, с определенными полями: имя и курс.

Аннотация @SerializedName используется для изменения выходного имени свойства при сериализации, если это потребуется.

Итак, мы получили объект в виде строки, например такой объект может прийти приложению-клюиенту от сервера или может быть считан с файла. Для выполнения парсинга нам необходимо получить объект класса Gson , для этого удобно использовать GsonBuilder . Преобразование JSON в объект класса Student выполняется методом Gson.from() :

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

Здесь методу fromJson() мы в качестве второго параметра должны передаем тип нашей коллекции.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *