json 与entity/list/map的转换

时间:2022-02-06 01:27:51

一  json -> entity

User.java

package com.xxx.hotel.train.json.json2entity;

import java.io.Serializable;

/**
 * @author balfish
 * @date 15-7-22
 */
public class User implements Serializable {
    private static final long serialVersionUID = 5483047693755054496L;

    private String username;
    private String password;

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @Override
    public String toString() {
        return "User{" +
                "username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}

Json2EntityTest.java

package com.xxx.hotel.train.json.json2entity;

import net.sf.json.JSONObject;
import com.fasterxml.jackson.databind.ObjectMapper;

/**
 * @author balfish
 * @date 15-7-22
 */
public class Json2EntityTest {

    // json转化为entity,list和map同理,此处不作累述
    private static ObjectMapper objectMapper = null;

    public static void main(String[] args) throws Exception{
        objectMapper = new ObjectMapper();
        writeJson2Entity();
    }

    private static void writeJson2Entity() throws Exception {
        String json = "{ \"username\":\"balfish\" , \"password\":\"balfish\"}";
        System.out.println(objectMapper.readValue(json, User.class));

        JSONObject jsonObject = JSONObject.fromObject(json);
        System.out.println(jsonObject);
    }

}

二  entity -> json

User.java

package com.xxx.hotel.train.json.entity2json;

import java.io.Serializable;

/**
 * @author balfish
 * @date 15-7-22
 */
public class User implements Serializable {
    private static final long serialVersionUID = 359755144270845410L;
    private String username;
    private String password;
    private Car car;

    public User(String username, String password, Car car) {
        this.username = username;
        this.password = password;
        this.car = car;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public Car getCar() {
        return car;
    }

    public void setCar(Car car) {
        this.car = car;
    }

    @Override
    public String toString() {
        return "User{" +
                "car=" + car +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}

Car.java

package com.xxx.hotel.train.json.entity2json;

import java.io.Serializable;

/**
 * @author balfish
 * @date 15-7-22
 */
public class Car implements Serializable {

    private static final long serialVersionUID = -1013056738822619070L;
    private String color;
    private String country;

    public Car(String color, String country) {
        this.color = color;
        this.country = country;
    }

    public String getColor() {
        return color;
    }

    public void setColor(String color) {
        this.color = color;
    }

    public String getCountry() {
        return country;
    }

    public void setCountry(String country) {
        this.country = country;
    }

    @Override
    public String toString() {
        return "Car{" +
                "color='" + color + '\'' +
                ", country='" + country + '\'' +
                '}';
    }
}

Entity2JsonTest.java

package com.xxx.hotel.train.json.entity2json;

import java.io.IOException;
import java.util.List;
import java.util.Map;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;

/**
 * @author balfish
 * @date 15-7-22
 */
public class Entity2JsonTest {

    private static final Logger LOGGER = LoggerFactory.getLogger(Entity2JsonTest.class);
    private static ObjectMapper objectMapper = null;
    private static User user = null;

    private static void writeEntity2Json() throws IOException {
        /**
         * 小心 objectMapper.writeValue(System.out, user); 这个方法只会打印一次结果 因为在这个重载方法中在向控制台进行重定向以后会有一个流关闭的过程,那么将无法继续写入 所以慎用
         */
        System.out.println("用objectMapper的方法......(entity->json)");
        System.out.println(objectMapper.writeValueAsString(user));
    }

    private static void writeList2Json() throws IOException {
        System.out.println("用objectMapper的方法......(list->json)");
        List<User> userList = Lists.newArrayList();
        userList.add(user);

        User user = new User("sam", "sam", new Car("green", "England"));
        userList.add(user);
        System.out.println(objectMapper.writeValueAsString(userList));

        System.out.println("用JsonArray的方法......(list->json)");
        List<Object> list = Lists.newArrayList();
        list.add(1);
        list.add(true);
        list.add('j');
        list.add(new char[] { 'j', 's', 'o', 'n' });
        list.add(null);
        list.add("json");
        list.add(new String[] { "json", "-", "lib" });

        System.out.println(JSONArray.fromObject(list));
    }

    private static void writeMap2Json() throws IOException {
        /**
         * objectMapper.writeValue(new File("/home/balfish/jsonmap.txt"), stringObjectMap);
         * 如上,wtiteValue有很多重载方法,可以根据需要选择
         */
        System.out.println("用objectMapper的方法......(map->json)");
        Map<String, Object> stringObjectMap = Maps.newLinkedHashMap();

        stringObjectMap.put("username", user.getUsername());
        stringObjectMap.put("password", user.getPassword());
        stringObjectMap.put("user", user);
        System.out.println(objectMapper.writeValueAsString(stringObjectMap));

        /**
         * 这里的map如果key不是string的话,会报错如下 Exception in thread "main" net.sf.json.JSONException:
         * java.lang.ClassCastException: JSON keys must be strings.
         */
        System.out.println("用JSONObject的方法......(map->json)");
        Map<String, Object> map = Maps.newLinkedHashMap();
        map.put("1", "Beijing");
        map.put("2", "Shanghai");
        /**
         * JSONObject的fromObject方法   {"1":"Beijing","2":"Shanghai"}
         * JSONArray 的fromObject方法  [{"1":"Beijing","2":"Shanghai"}]
         * 区别目前来看在于那个中括号
         */
        System.out.println(JSONObject.fromObject(map));
    }

    public static void main(String[] args) {
        user = new User("balfish", "balfish", new Car("red", "China"));
        objectMapper = new ObjectMapper();
        try {
            writeEntity2Json();
            writeList2Json();
            writeMap2Json();
        } catch (IOException e) {
            LOGGER.error("(entity/list/map)转换成json时出错", e);
        }
    }
}

三 需要的额外maven依赖包

   <!-- json-lib -->
      <dependency>
            <groupId>net.sf.json-lib</groupId>
            <artifactId>json-lib</artifactId>
            <version>2.4</version>
            <classifier>jdk15</classifier>
        </dependency>

   <!-- Jackson mapper -->
        <dependency>
            <groupId>org.codehaus.jackson</groupId>
            <artifactId>jackson-core-asl</artifactId>
        </dependency>

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

        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
        </dependency>

        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
        </dependency>