Пример использования Jackson: Java объекты и JSON

Jackson — Java библиотека для работы с данными в формате JSON. Jackson — Одна из самых быстрых (высокопроизводительных) библиотек. В данной статье мы рассмотрим примеры использования Jackson-а для преобразования Java объектов в JSON и обратно.

Преобразование Java объекта в JSON:

ObjectMapper mapper = new ObjectMapper();
mapper.writeValue(new FileOutputStream(filepath, user);

Преобразование JSON в Java объект:

ObjectMapper mapper = new ObjectMapper();
User user = (User) mapper.readValue(new FileInputStream(filepath),
    User.class);

Оба метода readValue() и writeValue() имеют множество вариантов, для того чтобы их можно было использовать со всеми возможными типами объектов ввода и вывода.

Добавление Jackson к проекту

Библиотека Jackson содержит 6 JAR файлов, каждый из которых предназначен для своих целей. Описание вы можете найти здесь. Для выполнения нашей задачи (преобразование объектов в JSON и обратно) нам потребуется файл jackson-mapper-asl.

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

        <dependency>
            <groupId>org.codehaus.jackson</groupId>
            <artifactId>jackson-mapper-asl</artifactId>
            <version>1.9.13</version>
        </dependency>

Для проекта ant нужно скачать библиотеку и добавить ее к проекту самостоятельно.

POJO

Для начала мы определим класс, объекты которого мы будем преобразовывать в JSON. Этот класс представляет из себя обычный POJO (Plain Old Java Object), «простой объект Java в старом стиле», не надо ни от чего наследоваться и не надо аннотировать класс и его элементы.

package ru.j4web.examples.java.json;

import java.util.List;

public class User {

    private String name;
    private int age;
    private List<String> messages;
    
    public User() {
    }
    
    public User(String _name, int _age, List<String> _messages) {
        name = _name;
        age = _age;
        messages = _messages;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public List<String> getMessages() {
        return messages;
    }

    public void setMessages(List<String> messages) {
        this.messages = messages;
    }

    @Override
    public String toString() {
        return "User [name=" + name + ", age=" + age + ", messages="
                + messages + "]";
    }
}

Внимание!

Для того, чтобы библиотека Jackson смогла преобразовать JSON строку в Java объект, класс должен обязательно содержать конструктор без параметров.

Преобразование Java объектов в JSON

Создадим объект типа User и запишем его JSON представление в файл user.json.

package ru.j4web.examples.java.json;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.codehaus.jackson.map.ObjectMapper;

public class JacksonExample {
    
    public static void main(String[] args) {
        writeValue();
    }
    
    private static void writeValue() {
        User user = new User("Иван Иванов", 28,
                new ArrayList<String>(){{add("A");add("B");add("C");}});
        ObjectMapper mapper = new ObjectMapper();
        try {
            // Выводим в json файл
            mapper.writeValue(new FileOutputStream(
                    System.getProperty("user.dir") + File.separator
                            + "user.json"), user);
            // Выводим на консоль
            System.out.println(mapper.writeValueAsString(user));
        } catch (IOException ex) {
            Logger.getLogger(JacksonExample.class.getName())
                    .log(Level.SEVERE, null, ex);
        }
    }
}
{"name":"Иван Иванов","age":28,"messages":["A","B","C"]}

Преобразование JSON в Java объект

Теперь мы из полученного на предыдущем шаге файла user.json сформируем Java объект типа User.

package ru.j4web.examples.java.json;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.codehaus.jackson.map.ObjectMapper;

public class JacksonExample {
    
    public static void main(String[] args) {
        readValue();
    }
    
    private static void readValue() {
        ObjectMapper mapper = new ObjectMapper();
        String filepath = System.getProperty("user.dir") + File.separator
                + "user.json";
        try {
            User user = (User) mapper.readValue(new FileInputStream(filepath),
                    User.class);
            System.out.println(user);
        } catch (IOException ex) {
            Logger.getLogger(JacksonExample.class.getName())
                    .log(Level.SEVERE, null, ex);
        }
    }
}
User [name=Иван Иванов, age=28, messages=[A, B, C]]

Полезная информация

Оставить комментарий

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

*