ObjectMapper实现Json、JsonNode、JsonObject等转换

ObjectMapper实现Json、JsonNode、JsonObject等转换

有些时候,我们要处理的 json,是不可以直接转换为javaBean处理滴,比如一些中文字段名,总不能在代码 对象里给属性都定义成中文,,,,那怎么搞,来下边这些东西帮你搞。

我遇到的场景就是要把,hbase中存储的json文本拿出来,转换存至数据库表(mysql)中
而hbase中存储的json文本都是中英混合的字段名,so…


Json、JsonNode、JsonObject的区别

  1. json是一个字符串
  2. jsonNode是一个对象,键值对类型,可以根据key获取值
  3. jsonObject是一个对象

Json字符串转换成JsonNode对象

String json = "xxxx";
ObjectMapper mapper = new ObjectMapper();
JsonNode jsonNode = mapper.readTree(json)

JsonNode 的 fieldNames方法可以获取所有的 key值

Iterator<String> stringIterator = jsonNode.fieldNames();
while (stringIterator.hasNext()) {
  stringIterator.next();
}

根据key获取值,value可能为子节点 JsonNode 或 String

JsonNode node1 = mapper.readTree(json);
// "key":"value"

// 通过key获取JsonNode节点
JsonNode node2 = node1.get("key");  // 输出为  "value"		带有双引号,属于JsonNode类型
// 获取节点的String值
String s = node2.asText; // 输出为 value, 属于String类型

如果是一个JsonNode数组,处理

使用JsonNode.elements( ); 读取数组中每个node

如果不是JsonNode数组,JsonNode.elements( );方法返回JsonNodes中的values

**注意:使用迭代器时,因为迭代器的自身特性(next指针移动读取元素),最好是在开始首行接收到 xxx.next( )的值,然后再进行处理,避免出错

进行list的迭代删除元素操作时,需要使用迭代器的 remove( )方法,而不是list自身的,否则出错。

// jsonNode1为数组形式, 即在json字符串中为 array形式, 利用json在线解析工具可以看出来
Iterator<JsonNode> elements = jsonNode1.elements();
while (elements.hasNext()) {
  JsonNode jsonNode = elements.next()String s1 = elements.next().asText();
}

  1. JsonNode.get( “aaaa”)

得到 JsonNode 结点

  1. JsonNode.asText( )

asText()是JsonNode的一个抽象方法public abstract String asText();被TextNode继承并重写了这个方法,直接输出文本内容。(去掉双引号)

带有双引号的数据 非String类型,而是以 JsonNode的形式存在

  1. JsonNodeisArray()

isArray()方法能够判断该 JsonNode是否是一个 array

Json字符串转换为JsonObject

String json = "xxx";
JSONObject jsonObject = JSON.parseObject(json);
// JsonObject对象转换为JavaBean  不推荐,太麻烦,直接上fastjson 或者其它的 
Student student = object.toJavaObject(Student.class);

其余的见edge收藏。。。。写给自己的,哈哈

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值