介绍
jackson-core是jackson的最核心部分,它提供了对JSON数据的完整⽀持。 此模块提供了最具底层的Streaming JSON解析器/⽣成器,这组流式API属于Low-Level API,具有⾮常显著的特点:
- 开销⼩,损耗⼩,性能极⾼
- 因为是Low-Level API,所以灵活度极⾼
- ⼜因为是Low-Level API,所以易错性⾼,可读性差 jackson-core 模块提供了两种处理JSON的⽅式(整个Jackson⼀共3种):
- 流式API:读取并将JSON内容写⼊作为离散事件 -> JsonParser 读取数据,⽽ JsonGenerator 负责写⼊数据
- 树模型:JSON⽂件在内存⾥以树形式表示。此种⽅式也很灵活,它类似于XML的DOM解析
概念
- 流式(Streaming):此概念与Java8的Stream流是完全不同的。这里指的是I/O流,所以在读/写后都需要close
- 增量模式:它表示每个部分一个一个地往上增加。后面的例子会体现
- JsonToken: 每一部分都是一个独立的Token(有不同类型的Token),最终被“拼凑”起来就是一个JSON
DEMO
JsonGenerator写
@Test
void generatorTest() throws Exception {
JsonFactory jsonFactory = new JsonFactory();
JsonGenerator jsonGenerator = jsonFactory.createGenerator(new File("test.json"), JsonEncoding.UTF8);
jsonGenerator.writeStartObject();
jsonGenerator.writeStringField("name", "generator-test");
jsonGenerator.writeNumberField("age", 22);
// 写入一个对象
jsonGenerator.writeFieldName("object");
jsonGenerator.writeStartObject();
jsonGenerator.writeStringField("name", "nested-object");
jsonGenerator.writeStringField("value", "this is a test");
jsonGenerator.writeEndObject();
//写入一个数组格式
jsonGenerator.writeFieldName("list");
jsonGenerator.writeStartArray();
jsonGenerator.writeString("computer");
jsonGenerator.writeString("helicopter");
jsonGenerator.writeEndArray();
jsonGenerator.writeEndObject();
jsonGenerator.close();
}
JsonParser读
@Test
void parserTest() throws Exception {
JsonFactory jsonFactory = new JsonFactory();
JsonParser jsonParser = jsonFactory.createParser(new File("test.json"));
JsonToken jsonToken = null;
while (jsonParser.nextToken() != JsonToken.END_OBJECT) {
String fieldName = jsonParser.getCurrentName();
if ("name".equals(fieldName)) {
jsonToken = jsonParser.nextToken();
System.out.println("==============token类型是:" + jsonToken);
System.out.println(jsonParser.getText());
} else if ("age".equals(fieldName)) {
jsonToken = jsonParser.nextToken();
System.out.println("==============token类型是:" + jsonToken);
System.out.println(jsonParser.getIntValue());
} else if ("object".equals(fieldName)) {
jsonToken = jsonParser.nextToken();
System.out.println("==============token类型是:" + jsonToken);
while (jsonParser.nextToken() != JsonToken.END_OBJECT) {
String dogFieldName = jsonParser.getCurrentName();
if ("name".equals(dogFieldName)) {
jsonToken = jsonParser.nextToken();
System.out.println("======================token类型是:" + jsonToken);
System.out.println(jsonParser.getText());
} else if ("value".equals(dogFieldName)) {
jsonToken = jsonParser.nextToken();
System.out.println("======================token类型是:" + jsonToken);
System.out.println(jsonParser.getText());
}
}
} else if ("list".equals(fieldName)) {
jsonToken = jsonParser.nextToken();
System.out.println("==============token类型是:" + jsonToken);
while (jsonParser.nextToken() != JsonToken.END_ARRAY) {
System.out.println(jsonParser.getText());
}
}
}
}
基础包核心包的使用主要就是这一块,JsonGenerator和JsonParser,还有一块部分是JsonToken