架包
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.11.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.11.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.11.0</version>
</dependency>
1.树模型:提供一个 JSON 文档可变内存树的表示形式
public void write() throwsIOException {
//JsonNodeFactory 实例,可全局共享
privateJsonNodeFactory jsonNodeFactory = JsonNodeFactory.instance;
//JsonFactory 实例,线程安全
privateJsonFactory jsonFactory = newJsonFactory();
//根节点
ObjectNode rootNode = jsonNodeFactory.objectNode();
//往根节点中添加普通键值对
rootNode.put("name","aaa");
rootNode.put("email","aaa@aa.com");
rootNode.put("age",24);
//往根节点中添加一个子对象
ObjectNode petsNode = jsonNodeFactory.objectNode();
petsNode.put("petName","kitty")
.put("petAge",3);
rootNode.set("pets", petsNode);
//往根节点中添加一个数组
ArrayNode arrayNode = jsonNodeFactory.arrayNode();
arrayNode.add("java")
.add("linux")
.add("mysql");
rootNode.set("skills", arrayNode);
//调用ObjectMapper的writeTree方法根据节点生成最终json字符串
JsonGenerator generator = jsonFactory.createGenerator(System.out);
ObjectMapper objectMapper = newObjectMapper();
objectMapper.writeTree(generator, rootNode);
}
public void read() throwsJsonParseException, JsonMappingException, IOException {
ObjectMapper objectMapper = newObjectMapper();
//使用ObjectMapper的readValue方法将json字符串解析到JsonNode实例中
JsonNode rootNode = objectMapper.readTree(jsonString);
//直接从rootNode中获取某个键的值,
//这种方式在如果我们只需要一个长json串中某个字段值时非常方便
JsonNode nameNode = rootNode.get("name");
String name = nameNode.asText();
System.out.println(name);
//从 rootNode 中获取数组节点
JsonNode skillsNode = rootNode.get("skills");
for(inti = 0;i < skillsNode.size();i++) {
System.out.println(skillsNode.get(i).asText());
}
//从 rootNode 中获取子对象节点
JsonNode petsNode = rootNode.get("pets");
String petsName = petsNode.get("petName").asText();
System.out.println(petsName);
}
2.数据绑定:JSON和POJO相互转换,基于属性访问器规约或注解
public void write() throwsIOException {
// JSON操作的核心
ObjectMapper mapper = new ObjectMapper();
// 把arg1转成json序列,并保存到arg0文件中。
mapper.writeValue(File arg0, Object arg1);
// 把arg1转成json序列,并保存到arg0输出流中。
mapper.writeValue(OutputStream arg0, Object arg1);
// 把arg0转成json序列,并把结果输出成字节数组。
mapper.writeValueAsBytes(Object arg0);
// 把arg0转成json序列,并把结果输出成字符串。
mapper.writeValueAsString(Object arg0);
// 将User对象转换成json
String json = mapper.writeValueAsString(user);
// 将List对象转换错json
json = mapper.writeValueAsString(list);
System.out.println(json);
}
public void read() throwsIOException {
// JSON操作的核心
ObjectMapper mapper = new ObjectMapper();
// 将jsonString转换成 Student 对象
Student student = mapper.readValue(jsonString, Student.class);
// json字符串转为Map对象
Map map=mapper.readValue(jsonString, Map.class);
// 读取JSON文件转换为对象
Student student2 = mapper.readValue(new File("student.json"), Student.class);
//json文件转换为map
Map<String,Object> studentDataMap = mapper.readValue(new File("d:/student2.json"), Map.class);
// 树形遍历
JsonNode rootNode = mapper.readTree(jsonString);
rootNode = mapper.readTree(new FileInputStream("student.json"));
}
3.流式API:不到需要考虑性能的时候,一定不要使用这种方式
public void read() throws JsonParseException, IOException{
JsonFactory factory = new JsonFactory();
InputStream is = this.getClass().getClassLoader().getResourceAsStream("user.json");
JsonParser jsonParse = factory.createJsonParser(is);
User user = new User();
JsonToken token = jsonParse.nextToken();
if(token==JsonToken.START_OBJECT){
while((jsonParse.nextToken())!=JsonToken.END_OBJECT){
String fieldName = jsonParse.getCurrentName();
jsonParse.nextToken();
if("name".equalsIgnoreCase(fieldName)){
Name name = new Name();
while(jsonParse.nextToken()!=JsonToken.END_OBJECT){
if(jsonParse.getCurrentName().equals("first")){
name.setFirst(jsonParse.getText());
}
if(jsonParse.getCurrentName().equals("last")){
name.setLast(jsonParse.getText());
}
}
user.setName(name);
}else if("gender".equals(fieldName)){
String text = jsonParse.getText();
user.setGender(Gender.valueOf(text));
}else if("verified".equals(fieldName)){
user.setVerified(jsonParse.getBooleanValue());
}else if("userImage".equals(fieldName)){
user.setUserImage(jsonParse.getBinaryValue());
}
}
}
jsonParse.close();
}
public void write() throws IOException{
JsonFactory jsonFactory = new JsonFactory();
JsonGenerator jg = jsonFactory.createGenerator(new File("user2.json"), JsonEncoding.UTF8);
jg.useDefaultPrettyPrinter();
jg.writeStartObject();
jg.writeObjectFieldStart("name");
jg.writeStringField("first", "Joe");
jg.writeStringField("last", "Sixpack");
jg.writeEndObject();
jg.writeStringField("gender", Gender.MALE.name());
jg.writeBooleanField("verified", false);
jg.writeFieldName("userImage");
byte[] binaryData = new byte[]{70, 111, 111, 98, 97, 114, 33};
jg.writeBinary(binaryData);
jg.writeEndObject();
jg.close();
}
长期更新的公众号:Java技术学习笔记
![](https://img.haomeiwen.com/i14197219/3872ed0e08b0e988.jpg)
Java技术学习笔记
网友评论