美文网首页
jackson的简单使用

jackson的简单使用

作者: 程序员的交流电 | 来源:发表于2019-11-29 20:13 被阅读0次

jackson是一款通用的json序列化和反序列化的类库。
json是一种通用的数据传输格式,和xml一样,xml也是文本,但是涉及到DTD和scheme等文件约束,让人头大。json也是在这种背景下面出现的。xml的解析主要有dom和sax解析,dom比较通用,sax只能查询,查询性能好。
ObjectMapper有两个主要方法来操作json的
writeValueAsString(Object object)把对象转换为json
readValue(String str,Class clz)把对象转化为对应的类

public class Person {
//省略tostring和getset
    private String name;
    private int age;
    private List<String> list;
    private Map<String, String> map;
    public Person() {
    }
    public Person(String name, int age, List<String> list, Map<String, String> map) {
        this.name = name;
        this.age = age;
        this.list = list;
        this.map = map;
    }
}
public class Mains {
    
    private static final ObjectMapper objectMapper = new ObjectMapper();

    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("qqq");
        list.add("www");
        list.add("ddd");
        Map<String, String> map = new HashMap<>();
        map.put("names1", "aaa");
        map.put("names2", "bbb");
        map.put("names3", "ccc");
        Person zhouqijiang = new Person("zhouqijiang", 360, list, map);
        String s = toJosn(zhouqijiang);
        jsonToObject(s, Person.class);
        jsonToMap(s);
    }
    //把对象转换为json
    public static String toJosn(Object object) {
        try {
            String s = objectMapper.writeValueAsString(object);
            System.out.println(s);
            return s;
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }
        return null;

    }
    //json转化为对象
    public static void jsonToObject(String str, Class clz) {
        try {
            Object o = objectMapper.readValue(str, clz);
            System.out.println(o);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    //json转化为Map
    public static void jsonToMap(String str) {
        try {
            Map<String, Object> map = objectMapper.readValue(str, Map.class);
            Set<Map.Entry<String, Object>> entries = map.entrySet();

            for (Map.Entry<String, Object> entry : entries) {
                System.out.println(entry.getKey() + " " + entry.getValue());
                if (entry.getValue() instanceof Map) {
                    Map<String, String> value = (Map) entry.getValue();
                    for (String key : value.keySet()) {
                        System.out.println(key+" "+value.get(key));
                    }
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

上面的是一个自定义的javabean对象和json之间的操作
下面讲一下,对集合的操作,以List为例

public static void main(String[] args) {
        List<Book> list = new ArrayList<>();
        Book aa = new Book("aa", 12);
        Book bb = new Book("bb", 13);
        Book cc = new Book("cc", 14);
        list.add(aa);
        list.add(bb);
        list.add(cc);
        try {
            final String s = objectMapper.writeValueAsString(list);
            System.out.println(s);
            List<Book> o = objectMapper.readValue(s, new TypeReference<List<Book>>() {});
            o.forEach(System.out::println);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

//输出结果
[{"name":"aa","age":12},{"name":"bb","age":13},{"name":"cc","age":14}]
Book(name=aa, age=12)
Book(name=bb, age=13)
Book(name=cc, age=14)

上面的使用的List举例子的
下面的是对map的操作
destMap = mapper.readValue(jsonData, new TypeReference<Map<Integer, RbtCounter>>(){});

相关文章

网友评论

      本文标题:jackson的简单使用

      本文链接:https://www.haomeiwen.com/subject/lwagwctx.html