zoukankan      html  css  js  c++  java
  • 【Json】fastjson与jackson常用操作记录

    本文只是记录fastjson、jackson一些常用的操作方法,没作比较,网上写比较的文章很多啦。

    1、对象转Json串

    // fastjson                                                            
    String objStr = JSON.toJSONString(obj);  // 默认去掉属性为Null值的
    
    // jackson
    ObjectMapper mapper = new ObjectMapper();
    mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); // 默认不会去掉Null的,要自己配 
    String objStr = mapper.writeValueAsString(obj);

    2、Json串转Json对象

    // fastjson
    JSONObject objJson = JSON.parseObject(objStr);
    
    // jackson
    ObjectMapper mapper = new ObjectMapper();
    JsonNode objJson = mapper.readTree(objStr);

    3、Json串转Java对象

    // fastjson
    Clazz obj = JSON.parseObject(jsonStr, Clazz.class);
    
    // jackson
    ObjectMapper mapper = new ObjectMapper();
    Clazz obj = mapper.readValue(jsonStr, Clazz.class);

    4、获取Json对象的key

    // fastjson
    Set<String> keySet = jsonObj.keySet();
    String key = keySet.iterator().next();  // 得到第一个key
    
    // jackson
    Iterator<String> keys = jsonObj.fieldNames();
    String key = fieldNames.next();  // 得到第一个key

    5、获取Json对象的value

    // fastjson
    jsonObj.get("key")
    
    // jackson
    jsonObj.path("key")

    6、创建一Json对象并设置keyvalue

    // fastjson
    JSONObject jsonObj = new JSONObject();
    jsonObj.put("key", oldJsonObj);
    
    // jackson
    ObjectMapper mapper = new ObjectMapper();
    ObjectNode jsonObj = mapper.createObjectNode();
    jsonObj.set("key", oldJsonObj);

    在这点上,fastjson是直接一个JSONObject搞定,而jackson中JsonNode并没有直接能设置key/value的方法,这里要使用ObjectNode,jackson提供了树模型(tree model)来生成和解析json。如果想访问并对部分属性作修改的操作,树模型是很好的选择,ObjectNode继承于JsonNode,下面给个例子:

    ObjectMapper mapper = new ObjectMapper(); 
    // 创建ObjectNode 
    ObjectNode studentNode = mapper.createObjectNode(); 
    // 添加属性 
    studentNode.put("name","xiaoming"); 
    studentNode.put("age",18); 
    
    ObjectNode addressNode = mapper.createObjectNode(); 
    addressNode.put("street","guangzhou"); 
    
    // 设置子节点 
    studentNode.set("addr",addressNode); 
    // path查找节点 
    JsonNode searchNode = studentNode.path("street"); 
    // 删除属性 
    ((ObjectNode) studentNode).remove("addr"); 
    // 读取
    JsonNode rootNode = mapper.readTree(studentNode.toString()); 
    // JsonNode转java对象 
    Student student = mapper.treeToValue(studentNode, Student.class); 
    // java对象转JsonNode 
    JsonNode node = mapper.valueToTree(student);

    转: https://www.cnblogs.com/weknow619/p/9466198.html

    细节: https://www.cnblogs.com/yibutian/p/9473095.html

  • 相关阅读:
    Ubuntu 14.04 卸载通过源码安装的库
    Ubuntu 14.04 indigo 相关依赖
    Ubuntu 14.04 indigo 安装 cartographer 1.0.0
    Ubuntu 14.04 改变文件或者文件夹的拥有者
    安装cartographer遇到Unrecognized syntax identifier "proto3". This parser only recognizes "proto2"问题
    Unrecognized syntax identifier "proto3". This parser only recognizes "proto2". ”问题解决方法
    查看所有用户组,用户名
    1卸载ROS
    Ubuntu14.04 软件安装卸载
    Ubuntu14.04系统显示器不自动休眠修改
  • 原文地址:https://www.cnblogs.com/fps2tao/p/13202087.html
Copyright © 2011-2022 走看看