网站的建设目标,建设工程网站建筑工程预算,网站的链接优化,韩国美容网站模板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