JsonNode、JsonObject常用方法[通俗易懂]

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

1.JsonNode

项目中用到的jar包

import com.fasterxml.jackson.core.JsonParseException;  
import com.fasterxml.jackson.databind.JsonMappingException;  
import com.fasterxml.jackson.databind.JsonNode;  
import com.fasterxml.jackson.databind.ObjectMapper;  
import springfox.documentation.schema.Entry;  
import java.io.IOException;  
import java.util.*;  

 
Json字符串

String json = "{\"username\":\"tom\",\"company\":{\"companyName\":\"中华\",\"address\":\"北京\"},\"cars\":[\"奔驰\",\"宝马\"]"};  
String arrayJson = "[{\"number\":64,\"result\":\"SUCCESS\"},{\"number\":65,\"result\":\"FAILURE\"},{\"number\":66,\"result\":\"ABORTED\"},{\"number\":67,\"result\":\"SUCCESS\"}]";  
 Json字符串转换成JsonNode对象 
ObjectMapper mapper = new ObjectMapper); JsonNode jsonNode = mapper.readTreejson); 
jsonNode的fieldNames方法是获取jsonNode的所有的key值
Iterator<String> keys = jsonNode.fieldNames); whilekeys.hasNext)){ String key = keys.next); System.out.println"key键是:"+key); } 
根据key值获取对应的值
JsonNode path = jsonNode.path"username");  
JsonNode resultValue = jsonNode.findValue"username");  
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
Iterator<JsonNode> elements = jsonNode.elements); whileelements.hasNext)){ JsonNode node = elements.next); System.out.printlnnode.toString)); }
取出所有key值为number的JsonNode的List
List<JsonNode> findKeys = jsonNode.findParents"number"); for JsonNode result:findKeys){ System.err.printlnresult.toString)); }
取出所有key值为number对应的value如果value中包含子jsonNode并且子jsonNode的key值也为number,是无法捕获到并加入list的)
List<JsonNode> findValues = jsonNode.findValues"number"); forJsonNode value: findValues){ System.out.println value.toString)); }
  遍历某个JsonNode的key和valuevalue可能是字符串也可能是子jsonNode,但如果value是jsonNode数组的话,是无法读取的)
Iterator<Map.Entry<String,JsonNode>> jsonNodes = jsonNode.fields);  
         while jsonNodes.hasNext)) {  
            Map.Entry<String, JsonNode> node = jsonNodes.next);  
              System.err.println"遍历获取key:"+node.getKey));  
              System.err.println"遍历获取值:"+node.getValue).toString));
	}
如果是JDK1.8的话,可以这样遍历JsonNode的子节点
jsonNode.forEachJsonNode node)->{ System.out.println"结果:"+node.toString)); });
JsonNode对象转换成JSON字符串
String jsonStr = mapper.writeValueAsStringjsonNode);  
     System.out.println"JsonNode--->Json:"+jsonStr);

2.JsonObject fastjson)

json字符串转换成JsonObject对象

  String studentJson = "{\"stuId\":\"116\",\"stuName\":\"赵云\",\"stuAddress\":\"常山\",\"stuIQ\":\"93\"}";  
  JSONObject object =  JSON.parseObjectstudentJson);

JsonObject对象转换成JavaBean

Student student = object.toJavaObjectStudent.class);

json字符串转换成JavaBean

Student stu = JSON.parseObjectstudentJson,Student.class);

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

String name = object.getString"stuName");

其他的常用方法

   public static final Object parseString text);    // 把JSON文本parse为JSONObject或者JSONArray
   public static final JSONArray parseArrayString text); // 把JSON文本parse成JSONArray
   public static final <T> List<T> parseArrayString text, Class<T> clazz); //把JSON文本parse成JavaBean集合
   public static final String toJSONStringObject object); // 将JavaBean序列化为JSON文本
   public static final String toJSONStringObject object, boolean prettyFormat); // 将JavaBean序列化为带格式的JSON文本
   public static final Object toJSONObject javaObject); // 将JavaBean转换为JSONObject或者JSONArray。
      

Published by

风君子

独自遨游何稽首 揭天掀地慰生平

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注