最近项目中要用json,闲暇时间,对json进行下总结。

1.JsonNode

项目中用到的jar包
  1.  
    import com.fasterxml.jackson.core.JsonParseException;
  2.  
    import com.fasterxml.jackson.databind.JsonMappingException;
  3.  
    import com.fasterxml.jackson.databind.JsonNode;
  4.  
    import com.fasterxml.jackson.databind.ObjectMapper;
  5.  
    import springfox.documentation.schema.Entry;
  6.  
    import java.io.IOException;
  7.  
    import java.util.*;

Json字符串

  1.  
    String json = "{\"username\":\"tom\",\"company\":{\"companyName\":\"中华\",\"address\":\"北京\"},\"cars\":[\"奔驰\",\"宝马\"]"};
  2.  
    String arrayJson = "[{\"number\":64,\"result\":\"SUCCESS\"},{\"number\":65,\"result\":\"FAILURE\"},{\"number\":66,\"result\":\"ABORTED\"},{\"number\":67,\"result\":\"SUCCESS\"}]";
 Json字符串转换成JsonNode对象 

  1.  
    ObjectMapper mapper = new ObjectMapper();
  2.  
    JsonNode jsonNode = mapper.readTree(json);
jsonNode的fieldNames方法是获取jsonNode的所有的key值

  1.  
    Iterator<String> keys = jsonNode.fieldNames();
  2.  
    while(keys.hasNext()){
  3.  
    String key = keys.next();
  4.  
    System.out.println("key键是:"+key);
  5.  
    }
根据key值获取对应的值
  1.  
    JsonNode path = jsonNode.path("username");
  2.  
    JsonNode resultValue = jsonNode.findValue("username");
  3.  
    JsonNode resultPath = jsonNode.findPath("username");
如果value为String,可以这样读取jsonNode的asText()方法获取到字符串,其他类型可以jsonNode.findValue("number").asInt();这几种方法都可以根据key获取到相应的值,匹配到一个就停止搜索。resultValue和resultPath的区别在于,如果没有匹配到任何key值为性别,resultValue为null,resultPath为空JsonNode,第一种的区别不是很清楚。

如果是一个JsonNode数组,使用jsonNode.elements();读取数组中每个node, 如果不是JsonNode数组,使用jsonNode.elements();返回jsonNode的values

  1.  
    Iterator<JsonNode> elements = jsonNode.elements();
  2.  
    while(elements.hasNext()){
  3.  
    JsonNode node = elements.next();
  4.  
    System.out.println(node.toString());
  5.  
    }

 取出所有key值为number的JsonNode的List

  1.  
    List<JsonNode> findKeys = jsonNode.findParents("number");
  2.  
    for (JsonNode result:findKeys){
  3.  
    System.err.println(result.toString());
  4.  
    }
取出所有key值为number对应的value(如果value中包含子jsonNode并且子jsonNode的key值也为number,是无法捕获到并加入list的)

  1.  
    List<JsonNode> findValues = jsonNode.findValues("number");
  2.  
    for(JsonNode value: findValues){
  3.  
    System.out.println( value.toString());
  4.  
    }
  遍历某个JsonNode的key和value(value可能是字符串也可能是子jsonNode,但如果value是jsonNode数组的话,是无法读取的)
  1.  
    Iterator<Map.Entry<String,JsonNode>> jsonNodes = jsonNode.fields();
  2.  
    while (jsonNodes.hasNext()) {
  3.  
    Map.Entry<String, JsonNode> node = jsonNodes.next();
  4.  
    System.err.println("遍历获取key:"+node.getKey());
  5.  
    System.err.println("遍历获取值:"+node.getValue().toString());
  6.  
    }
如果是JDK1.8的话,可以这样遍历JsonNode的子节点

  1.  
    jsonNode.forEach((JsonNode node)->{
  2.  
    System.out.println("结果:"+node.toString());
  3.  
    });
JsonNode对象转换成JSON字符串
  1.  
    String jsonStr = mapper.writeValueAsString(jsonNode);
  2.  
    System.out.println("JsonNode--->Json:"+jsonStr);

2.JsonObject( fastjson)

json字符串转换成JsonObject对象
  1.  
    String studentJson = "{\"stuId\":\"116\",\"stuName\":\"赵云\",\"stuAddress\":\"常山\",\"stuIQ\":\"93\"}";
  2.  
    JSONObject object = JSON.parseObject(studentJson);
JsonObject对象转换成JavaBean
Student student = object.toJavaObject(Student.class);
json字符串转换成JavaBean
Student stu = JSON.parseObject(studentJson,Student.class);

JsonObject对象根据key获取对应的值

String name = object.getString("stuName");

其他的常用方法

  1.  
    public static final Object parse(String text); // 把JSON文本parse为JSONObject或者JSONArray
  2.  
    public static final JSONArray parseArray(String text); // 把JSON文本parse成JSONArray
  3.  
    public static final <T> List<T> parseArray(String text, Class<T> clazz); //把JSON文本parse成JavaBean集合
  4.  
    public static final String toJSONString(Object object); // 将JavaBean序列化为JSON文本
  5.  
    public static final String toJSONString(Object object, boolean prettyFormat); // 将JavaBean序列化为带格式的JSON文本
  6.  
    public static final Object toJSON(Object javaObject); // 将JavaBean转换为JSONObject或者JSONArray。

JsonNode、JsonObject常用方法的更多相关文章

  1. objectMapper、JsonNode、JsonObject常用方法

    一.objectMapper https://blog.csdn.net/han1196639488/article/details/79358743 二.JsonNode.JsonObject常用方 ...

  2. JsonObject、JsonArray操作json的个人总结

    介绍 JsonObject.JsonArray之前,先介绍下JsonConfig JsonConfig: setClassMap(Map classMap)设置json属性类型,上json里的其中值为 ...

  3. fastjson、jackson以及son-lib的使用

    fastjson前言 fastJson是阿里巴巴出品的一个json序列化工具. 引入依赖 <dependency> <groupId>com.alibaba</group ...

  4. 阿里巴巴fastJson进行json数据解析

    1.生成JsonObject:将Java bean转换成易于处理和传输的strig的key value形式. 2.解析JsonObject:将收到的字符串转换成JsonObejct这种对象形式,Jso ...

  5. json数组的解析

    一直以来,经常会遇到json数据从前端或者我经常从网站上爬取的数据中会有json数据的存在,这样如果想要获取json数据就需要对json数据进行解析 在开发过程中,经常需要和别的系统交换数据,数据交换 ...

  6. 如何实现Activiti的分支条件的自定义配置(转)

    如何实现Activiti的分支条件的自定义配置 博客分类: Activiti Java SaaS   一.Activiti的流程分支条件的局限 Activiti的流程分支条件目前是采用脚本判断方式,并 ...

  7. FastJson中JSONObject用法及常用方法总结

    本文为博主原创,未经允许不得转载: 最近一直有用到解析各种数据,主要是用FastJson进行数据解析,其中一个重要的类为JSONObject,今天有时间,所以进行总结一下: JSONobject是Fa ...

  8. postman的Testing examples(常用方法)

    在实现接口自动测试的时候,会经常遇到接口参数依赖的问题,例如调取登录接口的时候,需要先获取登录的key值,而每次请求返回的key值又是不一样的,那么这种情况下,要实现接口的自动化,就要用到postma ...

  9. Newtonsoft—Json.NET常用方法简述

    Json.NET常用方法汇总(可解决日常百分之90的需求) 0.Json.NET基础用法 首先去官网下载最新的Newtonsoft.Json.dll(也可以使用VS自带的NuGet搜索Json.NET ...

随机推荐

  1. .NET破解之繁星代码生成器

    本教程只能用于学习研究,不可进行任何商业用途.如有使用,请购买正版,尊重他人劳动成果和知识产权! 对象:繁星代码生成器0.96 环境:Win7 x64 工具:exeinfoPE(查壳).de4dot ...

  2. DotNetBar12.1新控件——TokenEditor

    第一次接触第三方控件就是DotNetBar,现在官网已发布到12.2版本了,这里只能使用12.1破解版本,下载地址:http://www.t00y.com/file/92543094 在这个版本中出现 ...

  3. ExplorerControls的显示问题

    我们都知道ArcGIS桌面版本"添加数据"的功能是弹出一选择对话框,如下图所示,但我们总想搞自己的,以便融入自己的风格.下图左边是ArcGIS自带的"添加数据" ...

  4. SQLServer 之 Group By 和 Compute By

    创建测试表,如下: CREATE TABLE tableTest ( Id INT PRIMARY KEY, DepartMent ), Name ), Salary int ) 添加测试数据,如下图 ...

  5. http协议中content-length 以及chunked编码分析

    转载请注明出处 http://blog.csdn.net/yankai0219/article/details/8269922 0.序 1.http/1.1协议中与chunked编码的相关字段 1)E ...

  6. Java网络编程-URI和URL

    前提 前面的一篇文章<Java中的Internet查询>分析完了如何通过IP地址或者主机名确定主机在因特网中的地址.任意给定主机上可能会有任意多个资源,这些资源需要有标识符方便主机之间访问 ...

  7. Drawing points

    A point is the most simple graphics object that can be drawn. It is a small spot on the window. #!/u ...

  8. OpenERP Web Client设置闲置有效时间

    在Web Client端使用OpenERP时,默认的cookie有效时间是浏览器的当前作业窗口,这样就是说只要你不关闭浏览器,不管闲置多长时间,当前的连线都是有效的.这样就会有安全问题,如果你忘了登出 ...

  9. ubuntu系统——增加磁盘空间

    1.df查看磁盘使用情况 2.将windows下的磁盘空间分出与部分给ubuntu 3.格式化磁盘    在终端输入:mkfs -t ext3 /dev/sdb1    用ext3格式对/dev/sd ...

  10. 【TP5.0】页面布局,引入公共的模版文件

    1.实例:如后台admin模块,公用一个header.html和footer.hml 2.模块结构: 3.使用方式: {include file="common/header"} ...