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

JsonNode、JsonObject常用方法[通俗易懂]jsonNode,fastJson常用的方法

大家好,又见面了,我是你们的朋友全栈君。

 最近项目中要用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.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的values
Iterator<JsonNode> elements = jsonNode.elements(); while(elements.hasNext()){ JsonNode node = elements.next(); System.out.println(node.toString()); }
取出所有key值为number的JsonNode的List
List<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.JsonObject( fastjson)

json字符串转换成JsonObject对象
  String studentJson = "{\"stuId\":\"116\",\"stuName\":\"赵云\",\"stuAddress\":\"常山\",\"stuIQ\":\"93\"}";  
  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");

其他的常用方法

   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。
      
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/158330.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 《善数者成:大数据改变中国》读书笔记3

    《善数者成:大数据改变中国》读书笔记3第八章撬动商业:新“规模经济”,数最懂你每一个消费者在消费的过程中留下数据,就会形成商业大数据。“”智慧门店”与天猫围绕新零售在新品首发、渠道管理、大数据赋能和线上线下全渠道融合等领域展开一揽子合作。向新零售转变,卖货层面是最直接的,其次是数据要打通。海澜之家采用RFID技术给2亿件衣服分配了各自的身份编码,进而实现了线上下单、线下发货,并在门店之间实现了数据共享互通,让一条条销售数据从“碎片”走向“整合”,然后又通过大数据分析,更好地分析和洞察消费者需求,及时调整经营策略,降低整体经营性投入,最终

    2022年8月30日
    9
  • Python基础(3)—八种数据类型

    Python基础(3)—八种数据类型Python的八种数据类型八种数据类型分别是:number(数字)、string(字符串)、Boolean(布尔值)、None(空值)list(列表)、tuple(元组)、dict(字典)、set(集合)。下面,我将这八种类型的相关知识,做一个梳理。 1.number(数字类型)2.string(字符串类型)3.Boolean(布尔值)与空值4.list…

    2022年6月10日
    30
  • 领导含泪叮嘱我:MySQL 建表字段记得用 not null,不然就收拾包袱滚蛋

    领导含泪叮嘱我:MySQL 建表字段记得用 not null,不然就收拾包袱滚蛋上午我收到一条短信,内容是“尊敬的null你好,XXX”,当时我就笑了。真是外行看热闹,内行看门道,这是程序员都能Get的笑点,说明程序没有正确从数据库获取到我的姓名,然后把空值格式化为了null。

    2022年6月14日
    16
  • 到底该不该用RTOS——rtos的优点

    到底该不该用RTOS——rtos的优点我现在要不要学习RTOS? 学习RTOS有什么好处? 我的项目要不要跑RTOS?······等等一些关于RTOS的问题,

    2022年8月5日
    5
  • 反射型XSS的利用「建议收藏」

    反射型XSS的利用「建议收藏」反射型XSS:用户输入的恶意代码,被执行。利用:它通过给别人发送带有恶意脚本代码参数的URL,当URL地址被打开时,特有的恶意代码参数被HTML解析、执行。它的特点是非持久化,必须用户点击带有特定参数的链接才能引起。以前一直觉得反射型XSS危害不大,只能自己在客户端玩玩,实现弹窗。没想到,反射型XSS的利用比存储型还更容易,存储型XSS的利用还需结合CSRF.这篇博客很好的讲述了反射型XS…

    2022年5月4日
    97
  • sql练习学生成绩查询实践

    sql练习学生成绩查询实践数据使用介绍:–1.学生表Student(SId,Sname,Sage,Ssex)–SId学生编号,Sname学生姓名,Sage出生年月,Ssex学生性别–2.课程表Course(CId,Cname,TId)–CId课程编号,Cname课程名称,TId教师编号–3.教师表Teacher(TId,Tname)–TId教师编号,Tname教师姓名…

    2022年5月25日
    107

发表回复

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

关注全栈程序员社区公众号