Как преобразовать строку JSON в объект Java: шаги и примеры
Преобразование строки JSON в объект Java является обычной задачей в разработке программного обеспечения. Все больше и больше веб-приложений используют JSON для обмена данными между клиентом и сервером. В этой статье мы рассмотрим шаги и приведем примеры кода на JavaScript для преобразования строки JSON в объект Java.
1. Понимание JSON и Java объектов
Перед тем, как мы приступим к преобразованию, давайте рассмотрим, что такое JSON и как он связан с объектами Java.
JSON (JavaScript Object Notation) — это формат обмена данными, основанный на синтаксисе объектов JavaScript. Он используется для представления структурированных данных, которые могут быть легко преобразованы в объекты в различных языках программирования, включая Java.
В Java существует несколько способов преобразования строки JSON в объект Java:
2. Использование библиотеки JSON.simple
JSON.simple — это простая библиотека для работы с JSON в Java. Она предоставляет простые методы для преобразования строки JSON в объект Java и наоборот.
Для начала установите библиотеку JSON.simple, добавив ее в ваш проект. Затем вы можете использовать следующий код для преобразования строки JSON в объект Java:
import org.json.simple.JSONObject; import org.json.simple.parser.JSONParser; import org.json.simple.parser.ParseException; String jsonString = ""; JSONParser parser = new JSONParser(); try < JSONObject jsonObject = (JSONObject) parser.parse(jsonString); String name = (String) jsonObject.get("name"); Long age = (Long) jsonObject.get("age"); String city = (String) jsonObject.get("city"); // Используйте значения объекта для создания Java объекта Person person = new Person(name, age, city); >catch (ParseException e)
3. Использование библиотеки GSON
Google Gson - это библиотека, предоставляющая удобные методы для преобразования между объектами Java и JSON. Она позволяет автоматически преобразовывать JSON в Java-объекты и наоборот, используя аннотации или конфигурацию.
Для использования библиотеки Gson, добавьте зависимость в ваш проект и используйте следующий код:
import com.google.gson.Gson; String jsonString = ""; Gson gson = new Gson(); Person person = gson.fromJson(jsonString, Person.class);
4. Постобработка Java объекта
После преобразования строки JSON в объект Java, вы можете выполнить дополнительные операции или обработку этих данных в вашем приложении. Например, вы можете использовать значения полей объекта для создания новых объектов или обновления существующих.
Заключение
Преобразование строки JSON в объект Java - это важная задача, которую разработчикам приходится выполнять на ежедневной основе. В этой статье мы рассмотрели два популярных подхода, используя библиотеки JSON.simple и Gson. Надеюсь, что эта статья помогла вам лучше понять, как преобразовать JSON в объект Java в вашем JavaScript проекте.
Конвертация JSON в объект
для парсинга. Проблема случаеться когда необходимо распарсить объект, который внутри себя содержит другой объект с конструктором.
Вот примеры классов:
Конвертируемый класс:
public class Block < private Staff staff; public Staff getStaff() < return staff; >public void setStaff(Staff staff) < this.staff = staff; >>
Класс с конструктором:
public class Staff < private String name; public Staff(String name) < this.name = name; >public String getName() < return name; >public void setName(String name) < this.name = name; >>
Как возможно конвертнуть его не прибегая к написанию собственного парессера?
Отслеживать
9,103 4 4 золотых знака 20 20 серебряных знаков 28 28 бронзовых знаков
задан 17 окт 2018 в 10:50
11 2 2 бронзовых знака
А в чем собственно проблема? Вылетает исключение? Или просто не мапятся данные на вложенный объект? И не плохо было бы указать, какую библиотеку для маппинга Вы используете.
17 окт 2018 в 11:05
Я так понимаю используется Jackson. Попробуй создать пустой конструктор
17 окт 2018 в 11:25
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
Для того чтобы десериализовать JSON не обязательно использовать класс из библиотеки, которую вы не можете изменить, чтобы добавить туда noarg-конструктор. Но вы можете создать наследуемый класс, в котором можно это сделать.
public class StaffJson extends Stuff < public StaffJson() < super(""); >>
Или же просто создать другую модель и добавить туда конструктор. Потом можно написать метод, который будет конвертировать один объект в другой
Staff convert(StaffJson sj)
Rukovodstvo
статьи и идеи для разработчиков программного обеспечения и веб-разработчиков.
Как преобразовать объект JSON в объект Java с помощью Джексона
В этом руководстве мы рассмотрим, как преобразовать объект JSON в объект Java с помощью Jackson [https://github.com/FasterXML/jackson], чрезвычайно популярной библиотеки привязки данных для Java. В частности, мы будем работать с этим объектом JSON: > Поскольку мы работаем с внешней библиотекой,
Время чтения: 2 мин.
В этом руководстве мы рассмотрим, как преобразовать объект JSON в объект Java с помощью Jackson , чрезвычайно популярной библиотеки привязки данных для Java.
В частности, мы будем работать с этим объектом JSON:
Поскольку мы работаем с внешней библиотекой, давайте добавим зависимость. Если вы используете Maven, вы можете добавить его с помощью:
com.fasterxml.jackson.core jackson-databind 2.11.3
Или, если вы используете Gradle, вы можете добавить:
implementation group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '2.11.3'
Создание настраиваемого класса
После этого мы можем создать простой настраиваемый класс для размещения Employee из содержимого JSON:
public class Employee < private String name; private POSITION position; private Listskilltree; private Address address; // Constructors, Getters, Setters, toString() >
Примечание. Если мы хотим, чтобы Джексон мог автоматически связывать свойства нашего класса и свойства в объекте JSON, они должны иметь одинаковые имена. Мы расскажем, как изменить это поведение чуть позже. Кроме того, вам понадобится пустой конструктор для создания экземпляра.
Здесь мы используем перечисление POSITION , которое выглядит так:
public enum POSITION
И объект Address
public class Address < private String street; private String streetNo; // Constructors, Getters and Setters, toString() >
Преобразование объекта JSON в объект Java
Центральный класс Джексона - ObjectMapper . Это основной API для привязки данных к объектам, и вы все время будете использовать его с Джексоном.
Чтобы преобразовать объект JSON в объект Java, вы будете использовать метод readValue() ObjectMapper , который десериализует его в предоставленную ссылку на класс:
String json = " < \"name\":\"David\", \"position\":\"SOFTWARE_ENGINEER\", \"skilltree\":[ \"Java\", \"Python\", \"JavaScript\" ], \"address\":< \"street\":\"Street\", \"streetNo\":\"123\" >>"; // ObjectMapper instantiation ObjectMapper objectMapper = new ObjectMapper(); // Deserialization into the `Employee` class Employee employee = objectMapper.readValue(json, Employee.class); // Print information System.out.println(employee);
Выполнение этого кода приведет к:
Employee>
Другой способ сообщить Джексону, в какой класс следует десериализоваться, - использовать TypeReference :
Employee employee = objectMapper.readValue(json, new TypeReference()<>);
Печать этого employee также приведет к:
Employee>
Оба они создают данный объект и вызывают один и тот же процесс десериализации. Таким образом, единственная разница между этими двумя вызовами заключается в том, делаете ли вы статическую или динамическую ссылку на тип.
Licensed under CC BY-NC-SA 4.0
Преобразование из json в объект Java
В таких случаях идете на этот прекрасный ресурс: http://www.jsonschema2pojo.org/ Создаете себе POJO для ваших классов :
public class Cast < @SerializedName("fullName") @Expose private String fullName; @SerializedName("role") @Expose private String role; public String getFullName() < return fullName; >public void setFullName(String fullName) < this.fullName = fullName; >public String getRole() < return role; >public void setRole(String role) < this.role = role; >> package com.example; import com.google.gson.annotations.Expose; import com.google.gson.annotations.SerializedName; public class Director < @SerializedName("fullName") @Expose private String fullName; public String getFullName() < return fullName; >public void setFullName(String fullName) < this.fullName = fullName; >> package com.example; import java.util.List; import com.google.gson.annotations.Expose; import com.google.gson.annotations.SerializedName; public class Movie < @SerializedName("name") @Expose private String name;@SerializedName("year") @Expose private Integer year; @SerializedName("description") @Expose private String description; @SerializedName("director") @Expose private Director director; @SerializedName("cast") @Expose private Listcast = null; public String getName() < return name; >public void setName(String name) < this.name = name; >public Integer getYear() < return year; >public void setYear(Integer year) < this.year = year; >public String getDescription() < return description; >public void setDescription(String description) < this.description = description; >public Director getDirector() < return director; >public void setDirector(Director director) < this.director = director; >public List getCast() < return cast; >public void setCast(List cast) < this.cast = cast; >> package com.example; import java.util.List; import com.google.gson.annotations.Expose; import com.google.gson.annotations.SerializedName; public class Response < @SerializedName("movie") @Expose private Listmovie = null; public List getMovie() < return movie; >public void setMovie(List movie)
Ну и потом все просто (надеюсь у Вас добавлены все необходимые зависимости добавляющие Gson в Ваш проект)
Gson gson = new Gson(); Response response = gson.fromJson(yourJson, Response.class); List movies = response.getMovie();