JsonNode、Json 常用方法
最近项目中要用json,闲暇时间,对json进行下总结。
1.JsonNode
项目中用到的jar包
import com.faster .jackson.core.JsonParseException; import com.faster .jackson.databind.JsonMappingException; import com.faster .jackson.databind.JsonNode; import com.faster .jackson.databind. Mapper; 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对象 Mapper mapper = new Mapper(); JsonNode jsonNode = mapper.readTree(json); jsonNode的fieldNames方法是获取jsonNode的所有的key值 Iterator<String> keys = jsonNode.fieldNames(); while(keys.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的valuesIterator<JsonNode> elements = jsonNode.elements(); while(elements.hasNext()){ JsonNode node = elements.next(); System.out.println(node.toString()); } 取出所有key值为number的JsonNode的ListList<JsonNode> findKeys = jsonNode.findParents("number"); for (JsonNode result:findKeys){ System.err.println(result.toString()); }取出所有key值为number对应的value(如果value中包含子jsonNode并且子jsonNode的key值也为number,是无法捕获到并加入list的)List<JsonNode> findValues = jsonNode.findValues("number"); for(JsonNode value: findValues){ System.out.println( value.toString()); }遍历某个JsonNode的key和value(value可能是字符串也可能是子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.forEach((JsonNode node)->{ System.out.println("结果:"+node.toString()); });JsonNode对象转换成JSON字符串String jsonStr = mapper.writeValueAsString(jsonNode); System.out.println("JsonNode--->Json:"+jsonStr);2.Json ( fastjson)
json字符串转换成Json 对象
String studentJson = "{"stuId":"116","stuName":"赵云","stuAddress":"常山","stuIQ":"93"}"; JSON = JSON.parse (studentJson);Json 对象转换成JavaBean
Student student = .toJava (Student.class);json字符串转换成JavaBean
Student stu = JSON.parse (studentJson,Student.class);String name = .getString("stuName");其他的常用方法 public static final parse(String text); // 把JSON文本parse为JSON 或者JSONArray public static final JSONArray parseArray(String text); // 把JSON文本parse成JSONArray public static final <T> List<T> parseArray(String text, Class<T> clazz); //把JSON文本parse成JavaBean集合 public static final String toJSONString( ); // 将JavaBean序列化为JSON文本 public static final String toJSONString( , boolean prettyFormat); // 将JavaBean序列化为带格式的JSON文本 public static final toJSON( java ); // 将JavaBean转换为JSON 或者JSONArray。继续阅读与本文标签相同的文章
下一篇 :
JAVA SE 异常处理
-
MySQL之source命令
2026-05-26栏目: 教程
-
C++ 获取当前系统时间
2026-05-26栏目: 教程
-
MySQL之表碎片简介
2026-05-26栏目: 教程
-
Executors中的几种线程调用方式
2026-05-26栏目: 教程
-
通过BeanFactoryPostProcessor来获取bean
2026-05-26栏目: 教程
