java Json用法

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.readTree(json);
jsonNode的fieldNames方法是获取jsonNode的所有的key值

Iterator 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 elements = jsonNode.elements();

while(elements.hasNext()){

JsonNode node = elements.next();

System.out.println(node.toString());

}
取出所有key值为number的JsonNode的List

List findKeys = jsonNode.findParents(“number”);

for (JsonNode result:findKeys){

System.err.println(result.toString());

}
取出所有key值为number对应的value(如果value中包含子jsonNode并且子jsonNode的key值也为number,是无法捕获到并加入list的)

List 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 List parseArray(String text, Class 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。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值