网站的建设目标,建设工程网站建筑工程预算,网站的链接优化,韩国美容网站模板Java处理json有很多种方法#xff0c;在这里总结一下。
1 Jackson
Spring MVC 默认采用Jackson解析Json#xff0c;出于最小依赖的考虑#xff0c;也许Json解析第一选择就应该是Jackson。
1.1 引入的包
Jackson核心模块由三部分组成#xff1a;jackson-core、jackson-a…Java处理json有很多种方法在这里总结一下。
1 Jackson
Spring MVC 默认采用Jackson解析Json出于最小依赖的考虑也许Json解析第一选择就应该是Jackson。
1.1 引入的包
Jackson核心模块由三部分组成jackson-core、jackson-annotations、jackson-databind。 由于jackson-databind 依赖 jackson-core 和 jackson-annotations所以只显示地添加jackson-databind依赖jackson-core 和 jackson-annotations 就会隐式地添加到 Java 项目工程中。
dependencygroupIdcom.fasterxml.jackson.core/groupIdartifactIdjackson-databind/artifactIdversion2.9.6/version
/dependency1.2 ObjectMapper类
ObjectMapper类是Jackson中基于“对象绑定”的API可以将JSON映射到Java对象反序列化也可以将Java对象映射到JSON序列化
默认情况下Jackson通过匹配JSON字段名称与Java类的gettersetter方法名将JSON的字段映射到Java类的属性。Jackson删除了gettersetter方法名称的get和set部分并将其余名称的第一个字符转换为小写后和JSON字段名称做比较相同即匹配上。 举例如果有Java类如下
public class Car {private String brand null;private int doors 0;// getter Setterpublic String getBrand() { return this.brand; }public void setBrand(String brand){ this.brand brand;}public int getDoors() { return this.doors; }public void setDoors(int doors) { this.doors doors; }
}1.2.1 反序列化从JSON获得Java对象
ObjectMapper objectMapper new ObjectMapper();
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); // false表示忽略没有匹配上的JSON字段String carJson { \brand\ : \Mercedes\, \doors\ : 5 }; // JSON字符串
Car car objectMapper.readValue(carJson, Car.class); // 从JSON字符串获取对象
Reader reader new StringReader(carJson); // JSON字符输入流
car objectMapper.readValue(reader, Car.class); // 从JSON字符输入流获取对象
// 类似的还有从File对象、URL对象、InputStream对象字节输入流、字节数组等获取java对象String jsonArray [{\brand\:\ford\}, {\brand\:\Fiat\}]; // JSON字符串数组
ListCar cars objectMapper.readValue(jsonArray, new TypeReferenceListCar(){}); // 从JSON数组字符串获取Java对象的数组String jsonObject {\brand\:\ford\, \doors\:5}; // JSON字符串Map
MapString, Object jsonMap objectMapper.readValue(jsonObject, new TypeReferenceMapString,Object(){}); // 从JSON字符串获取Java Map注意还可以自定义反序列化规则这里不详解。
1.2.2 序列化将Java对象写入JSON
ObjectMapper objectMapper new ObjectMapper();Car car new Car();
car.setBrand(BMW);
car.setDoors(4);String json objectMapper.writeValueAsString(car); // 将Java对象序列化为JSON字符串
objectMapper.writeValue(new FileOutputStream(data/output-2.json), car); // 将Java对象序列化为JSON字符串并写入文件注意同样可以自定义序列化规则这里不详解。
1.3 JsonNode类
如果不知道接收到的JSON格式可以将其转换为JsonNode类即Jackson的JSON树模型。
1.3.1 JSON字符串和JsonNode对象相互转换
ObjectMapper objectMapper new ObjectMapper();
String carJson { \brand\ : \Mercedes\, \doors\ : 5 };
try {JsonNode jsonNode objectMapper.readValue(carJson, JsonNode.class); // 将JSON字符串转为JsonNode对象// JsonNode jsonNode objectMapper.readTree(carJson); // 和上一行代码功能完全相同
} catch (IOException e) {e.printStackTrace();
}
String json objectMapper.writeValueAsString(jsonNode); // 将JsonNode对象转为JSON字符串1.3.2 JsonNode类访问JSON字段
ObjectMapper objectMapper new ObjectMapper();
String carJson { \brand\ : \Mercedes\, \doors\ : 5, \owners\ : [\John\, \Jack\, \Jill\], \nestedObject\ : { \field\ : \value\ } };
try {JsonNode jsonNode objectMapper.readValue(carJson, JsonNode.class);// 字符串JsonNode brandNode jsonNode.get(brand);String brand brandNode.asText();System.out.println(brand brand);// 整型JsonNode doorsNode jsonNode.get(doors);int doors doorsNode.asInt();System.out.println(doors doors);// 数组JsonNode array jsonNode.get(owners);JsonNode jsonNode array.get(0);String john jsonNode.asText();System.out.println(john john);// 子JSONJsonNode child jsonNode.get(nestedObject);JsonNode childField child.get(field);String field childField.asText();System.out.println(field field);
} catch (IOException e) {e.printStackTrace();
}1.3.3 Java对象和JsonNode对象相互转换
ObjectMapper objectMapper new ObjectMapper();
Car car new Car();
car.brand Cadillac;
car.doors 4;
JsonNode carJsonNode objectMapper.valueToTree(car); // Java对象转JsonNode对象
Car car0 objectMapper.treeToValue(carJsonNode); // JsonNode对象转Java对象1.3.4 JsonNode类的set、put、remove
ObjectMapper objectMapper new ObjectMapper();
ObjectNode objectNode objectMapper.createObjectNode(); // 创建空的JsonNode对象
JsonNode childNode readJsonIntoNode();
objectNode.set(child1, childNode); // 使用set方法给JsonNode添加子Node
objectNode.put(field1, value1); // 使用put方法给JsonNode添加字段
objectNode.remove(field1); // 使用remove方法删除JsonNode某字段1.3.5 循环JsonNode所有字段
IteratorString fieldNames jsonNode.fieldNames(); // 创建Iterator遍历JsonNode字段
while(fieldNames.hasNext()) {String fieldName fieldNames.next();JsonNode field jsonNode.get(fieldName);
}1.4 JsonParser类
1.5 JsonGenerator类
2 fastjson
3 Gson