传入一个JSON字符串,进行处理,本文章提供两种方法进行解析
JsonNode
public static final Object parse(String text); // 把JSON文本parse为JSONObject或者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(Object object); // 将JavaBean序列化为JSON文本 public static final String toJSONString(Object object, boolean prettyFormat); // 将JavaBean序列化为带格式的JSON文本 public static final Object toJSON(Object javaObject); // 将JavaBean转换为JSONObject或者JSONArray
例如现在有一个字符串:
public OperateResult getJSONTest(@RequestBody() String jsonStr) throws Exception { // Json字符串转换成JsonNode对象 ObjectMapper mapper = new ObjectMapper(); JsonNode jsonNode = mapper.readTree(jsonStr); // 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("companyName"); JsonNode resultValue = jsonNode.findValue("companyName"); JsonNode resultPath = jsonNode.findPath("companyName"); // 获取JsonNode数组的每个节点 Iterator<JsonNode> elements = jsonNode.elements(); while(elements.hasNext()){ JsonNode node = elements.next(); System.out.println(node.toString()); } // 取出所有key值为companyName的JsonNode的List List<JsonNode> findKeys = jsonNode.findParents("companyName"); for (JsonNode result:findKeys){ System.err.println(result.toString()); } // 取出所有key值为number对应的value(如果value中包含子jsonNode并且子jsonNode的key值也为number,是无法捕获到并加入list的) List<JsonNode> findValues = jsonNode.findValues("companyName"); 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 json = mapper.writeValueAsString(jsonNode); System.out.println("JsonNode--->Json:"+json); return new OperateResult(true, "解析成功", null); }
注意:findValue()方法和findPath()方法都可以根据key获取value,区别在于:findPath()如果没有找到值会返回null,而findValue()如果没有找到值会返回一个缺少节点的无值非空实例。其次,在不保证节点一定会存在的情况下去获取子节点,需要做非空判断,因为如果没有父级节点去获取子节点会抛出空指针异常
public OperateResult getJSONTest(@RequestBody() String jsonStr) throws Exception { //json字符串转换成JsonObject对象 JSONObject object = JSON.parseObject(jsonStr); //JsonObject对象转换成JavaBean Student student = object.toJavaObject(Student.class); //json字符串转换成JavaBean Student stu = JSON.parseObject(jsonStr,Student.class); //JsonObject对象根据key获取对应的值 String name = object.getString("stuName"); return new OperateResult(true, "解析成功", null); }
原文:https://www.cnblogs.com/passex/p/15113746.html