一  jackson

Jackson有1.x系列和2.x系列,2.x系列有3个jar包需要下载:
jackson-core-2.2.3.jar(核心jar包)
jackson-annotations-2.2.3.jar(该包提供Json注解支持)
jackson-databind-2.2.3.jar (包含以上两个)

maven依赖

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

由于篇幅和时间原因,这里不再写model,都用list,map代替

import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;

import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * json解析测试
 *
 * @Author: Mr_li
 * @CreateDate: 2018-11-07$ 14:48$
 * @Version: 1.0
 */
public class JackSonTestCase {

    private static ObjectMapper mapper = new ObjectMapper();
    /**
     * 数据准备
     */
    static class getData {

        Map<String, Object> map = new HashMap<String, Object>();

        List<String> list = new ArrayList<>();

        List<Map<String, Object>> listMap = new ArrayList<Map<String, Object>>();

        public Map<String, Object> getMap() {
            map.put("name", "张三");
            map.put("age", "18");
            return map;
        }

        public List<String> getList() {
            list.add("a");
            list.add("b");
            return list;
        }

        public List<Map<String, Object>> getListMap() {
            listMap.add(getMap());
            return listMap;
        }
    }

    /**
     * ObjectMapper是JSON操作的核心,Jackson的所有JSON操作都是在ObjectMapper中实现。
     * ObjectMapper有多个JSON序列化的方法,可以把JSON字符串保存File、OutputStream等不同的介质中。
     * writeValue(File arg0, Object arg1)把arg1转成json序列,并保存到arg0文件中。
     * writeValue(OutputStream arg0, Object arg1)把arg1转成json序列,并保存到arg0输出流中。
     * writeValueAsBytes(Object arg0)把arg0转成json序列,并把结果输出成字节数组。
     * writeValueAsString(Object arg0)把arg0转成json序列,并把结果输出成字符串。
     */
    public static void test() throws IOException {
        //javaObj-->>jsonStr
        String json = mapper.writeValueAsString(new getData().getMap());

        //jsonStr-->>jsonObj
        String json1 = "{ \"brand\" : \"Mercedes\", \"doors\" : 5 }";
        //1
        Object o = mapper.readValue(json, Object.class);
        //2
        List<Map<String, Object>> beanList = mapper.readValue(json, new TypeReference<List<Map<String, Object>>>() {
        });
    }

    public static void main(String[] args) throws IOException {
        JackSonTestCase.test();
    }
}

二 fastjson

fastJson对于json格式字符串的解析主要用到了一下三个类:

JSON:fastJson的解析器,用于JSON格式字符串与JSON对象及javaBean之间的转换。

JSONObject:fastJson提供的json对象。

JSONArray:fastJson提供json数组对象。

maven依赖

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.51</version>
</dependency>
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;

import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * json解析测试
 *
 * @Author: Mr_li
 * @CreateDate: 2018-11-07$ 14:48$
 * @Version: 1.0
 */
public class FastjsonTestCase {

    private static JSONObject jsonObject = new JSONObject();

    private static JSONArray jsonArr = new JSONArray();

    class Student {

        private String studentName;
        private Integer studentAge;

        public String getStudentName() {
            return studentName;
        }

        public void setStudentName(String studentName) {
            this.studentName = studentName;
        }

        public Integer getStudentAge() {
            return studentAge;
        }

        public void setStudentAge(Integer studentAge) {
            this.studentAge = studentAge;
        }
    }

    /**
     * 数据准备
     */
    static class getData {

        Map<String, Object> map = new HashMap<String, Object>();

        List<String> list = new ArrayList<>();

        List<Map<String, Object>> listMap = new ArrayList<Map<String, Object>>();

        public Map<String, Object> getMap() {
            map.put("name", "张三");
            map.put("age", "18");
            return map;
        }

        public List<String> getList() {
            list.add("a");
            list.add("b");
            return list;
        }

        public List<Map<String, Object>> getListMap() {
            listMap.add(getMap());
            return listMap;
        }
    }

    public static void test() throws IOException {
        //jsonStr-->>jsonObj
        String json1 = "{\"studentName\":\"lily\",\"studentAge\":12}";
        JSONObject jsonObject = JSON.parseObject(json1);

        //jsonStr-->>jsonArray
        String json2 = "[{\"studentName\":\"lily\",\"studentAge\":12},{\"studentName\":\"lucy\",\"studentAge\":15}]";
        JSONArray jsonArray = JSON.parseArray(json1);

        //jsonstr-->>javaObj
        Student student = JSON.parseObject(json2, Student.class);
        List<Student> list = new ArrayList<Student>();
        ArrayList<Student> list1 = (ArrayList<Student>) JSONObject.parseObject(json2, List.class);

        //javaObj-->>jsonStr
        String jsonString = JSON.toJSONString(student);


    }

    public static void main(String[] args) throws IOException {
        FastjsonTestCase.test();
    }
}

三 gson

目前网络上有很多接口是Json形式的,Gson是谷歌开源的Json解析库,可以方便的将Java对象转换成Json字符串,也可以方便的将Json字符串转换成Java对象。

<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>2.8.5</version>
</dependency>
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * json解析测试
 *
 * @Author: Mr_li
 * @CreateDate: 2018-11-07$ 14:48$
 * @Version: 1.0
 */
public class GsonTestCase {

    private static Gson gson = new Gson();

    private static JsonParser parser = new JsonParser();

    class Student {

        private String studentName;
        private Integer studentAge;

        public String getStudentName() {
            return studentName;
        }

        public void setStudentName(String studentName) {
            this.studentName = studentName;
        }

        public Integer getStudentAge() {
            return studentAge;
        }

        public void setStudentAge(Integer studentAge) {
            this.studentAge = studentAge;
        }
    }

    /**
     * 数据准备
     */
    static class getData {

        Map<String, Object> map = new HashMap<String, Object>();

        List<String> list = new ArrayList<>();

        List<Map<String, Object>> listMap = new ArrayList<Map<String, Object>>();

        public Map<String, Object> getMap() {
            map.put("name", "张三");
            map.put("age", "18");
            return map;
        }

        public List<String> getList() {
            list.add("a");
            list.add("b");
            return list;
        }

        public List<Map<String, Object>> getListMap() {
            listMap.add(getMap());
            return listMap;
        }
    }

    public static void test() throws IOException {
        //jsonStr-->>jsonObj
        String json1 = "{\"studentName\":\"lily\",\"studentAge\":12}";
        JsonObject jsonObject = (JsonObject) parser.parse(json1);

        JsonElement parse = parser.parse(json1);
        JsonObject asJsonObject = parse.getAsJsonObject();

        //jsonStr-->>jsonArray
        String json2 = "[{\"studentName\":\"lily\",\"studentAge\":12},{\"studentName\":\"lucy\",\"studentAge\":15}]";
        JsonArray jsonArray = (JsonArray) parser.parse(json1);

        JsonElement parse1 = parser.parse(json1);
        JsonArray asJsonArray = parse1.getAsJsonArray();

        //jsonStr-->>javaObj
        Student student = new Gson().fromJson(json1, Student.class);
        HashMap<String, Student> studentHashMap = gson.fromJson(json1, new TypeToken<HashMap<String, Student>>() {
        }.getType());

        //javaObj-->>jsonStr
        String json = gson.toJson(student);


    }

    public static void main(String[] args) throws IOException {
        GsonTestCase.test();
    }
}

perfect!!!