java流式api,Jackson流式API
流式API读取和写入JSON内容离散事件。 JsonParser读取数据,而JsonGenerator写入数据。它是三者中最有效的方法,是最低开销和最快的读/写操作。它类似于XML的Stax解析器。在本文中,我们将展示的使用Jackson的流式API 读写JSON数据。流式API工作使用JSON为每一个细节的都是要小心处理。下面的例子将使用两个类:JsonParser- 解析JSON字符串。使用.
流式API读取和写入JSON内容离散事件。 JsonParser读取数据,而JsonGenerator写入数据。它是三者中最有效的方法,是最低开销和最快的读/写操作。它类似于XML的Stax解析器。
在本文中,我们将展示的使用Jackson的流式API 读写JSON数据。流式API工作使用JSON为每一个细节的都是要小心处理。下面的例子将使用两个类:
JsonParser - 解析JSON字符串。
使用JsonGenerator写入JSON
使用JsonGenerator是非常简单的。首先使用JsonFactory.createJsonGenerator()方法创建一个JsonGenerator,并用write***()方法来写每一个JSON值。
JsonFactoryjasonFactory=newJsonFactory();JsonGeneratorjsonGenerator=jasonFactory.createJsonGenerator(newFile("student.json"),JsonEncoding.UTF8);// {jsonGenerator.writeStartObject();// "name" : "Mahesh Kumar"jsonGenerator.writeStringField("name","Mahesh Kumar");
让我们来看看JsonGenerator操作。创建一个名为JacksonTester的Java类文件在目录 C:\>Jackson_WORKSPACE.
File: JacksonTester.java
importjava.io.File;importjava.io.IOException;importjava.util.Map;importorg.codehaus.jackson.JsonEncoding;importorg.codehaus.jackson.JsonFactory;importorg.codehaus.jackson.JsonGenerator;importorg.codehaus.jackson.JsonParseException;importorg.codehaus.jackson.map.JsonMappingException;importorg.codehaus.jackson.map.ObjectMapper;publicclassJacksonTester{publicstaticvoidmain(Stringargs[]){JacksonTestertester=newJacksonTester();try{JsonFactoryjasonFactory=newJsonFactory();JsonGeneratorjsonGenerator=jasonFactory.createJsonGenerator(newFile("student.json"),JsonEncoding.UTF8);// {jsonGenerator.writeStartObject();// "name" : "Mahesh Kumar"jsonGenerator.writeStringField("name","Mahesh Kumar");// "age" : 21jsonGenerator.writeNumberField("age",21);// "verified" : falsejsonGenerator.writeBooleanField("verified",false);// "marks" : [100, 90, 85]jsonGenerator.writeFieldName("marks");// [jsonGenerator.writeStartArray();// 100, 90, 85jsonGenerator.writeNumber(100);jsonGenerator.writeNumber(90);jsonGenerator.writeNumber(85);// ]jsonGenerator.writeEndArray();// }jsonGenerator.writeEndObject();jsonGenerator.close();//result student.json//{// "name":"Mahesh Kumar",// "age":21,// "verified":false,// "marks":[100,90,85]//}ObjectMappermapper=newObjectMapper();MapdataMap=mapper.readValue(newFile("student.json"),Map.class);System.out.println(dataMap.get("name"));System.out.println(dataMap.get("age"));System.out.println(dataMap.get("verified"));System.out.println(dataMap.get("marks"));}catch(JsonParseExceptione){e.printStackTrace();}catch(JsonMappingExceptione){e.printStackTrace();}catch(IOExceptione){e.printStackTrace();}}}
验证结果
使用javac编译如下类:
C:\Jackson_WORKSPACE>javacJacksonTester.java
现在运行jacksonTester看到的结果:
C:\Jackson_WORKSPACE>javaJacksonTester
验证输出
Mahesh Kumar
21
false
[100, 90, 85]
使用JsonParser 读取JSON
使用JsonParser是非常简单的。首先使用JsonFactory.createJsonParser()方法创建JsonParser,并使用它的nextToken()方法来读取每个JSON字符串作为标记。检查每个令牌和相应的过程。
JsonFactoryjasonFactory=newJsonFactory();JJsonParserjsonParser=jasonFactory.createJsonParser(newFile("student.json"));while(jsonParser.nextToken()!=JsonToken.END_OBJECT){//get the current tokenStringfieldname=jsonParser.getCurrentName();if("name".equals(fieldname)){//move to next tokenjsonParser.nextToken();System.out.println(jsonParser.getText());}}
让我们来看看JsonParser的操作。创建一个名为JacksonTester在Java类在文件夹 C:\>Jackson_WORKSPACE.
文件: JacksonTester.java
importjava.io.File;importjava.io.IOException;importorg.codehaus.jackson.JsonEncoding;importorg.codehaus.jackson.JsonFactory;importorg.codehaus.jackson.JsonGenerator;importorg.codehaus.jackson.JsonParseException;importorg.codehaus.jackson.JsonParser;importorg.codehaus.jackson.JsonToken;importorg.codehaus.jackson.map.JsonMappingException;publicclassJacksonTester{publicstaticvoidmain(Stringargs[]){JacksonTestertester=newJacksonTester();try{JsonFactoryjasonFactory=newJsonFactory();JsonGeneratorjsonGenerator=jasonFactory.createJsonGenerator(newFile("student.json"),JsonEncoding.UTF8);jsonGenerator.writeStartObject();jsonGenerator.writeStringField("name","Mahesh Kumar");jsonGenerator.writeNumberField("age",21);jsonGenerator.writeBooleanField("verified",false);jsonGenerator.writeFieldName("marks");jsonGenerator.writeStartArray();// [jsonGenerator.writeNumber(100);jsonGenerator.writeNumber(90);jsonGenerator.writeNumber(85);jsonGenerator.writeEndArray();jsonGenerator.writeEndObject();jsonGenerator.close();//result student.json//{// "name":"Mahesh Kumar",// "age":21,// "verified":false,// "marks":[100,90,85]//}JsonParserjsonParser=jasonFactory.createJsonParser(newFile("student.json"));while(jsonParser.nextToken()!=JsonToken.END_OBJECT){//get the current tokenStringfieldname=jsonParser.getCurrentName();if("name".equals(fieldname)){//move to next tokenjsonParser.nextToken();System.out.println(jsonParser.getText());}if("age".equals(fieldname)){//move to next tokenjsonParser.nextToken();System.out.println(jsonParser.getNumberValue());}if("verified".equals(fieldname)){//move to next tokenjsonParser.nextToken();System.out.println(jsonParser.getBooleanValue());}if("marks".equals(fieldname)){//move to [jsonParser.nextToken();// loop till token equal to "]"while(jsonParser.nextToken()!=JsonToken.END_ARRAY){System.out.println(jsonParser.getNumberValue());}}}}catch(JsonParseExceptione){e.printStackTrace();}catch(JsonMappingExceptione){e.printStackTrace();}catch(IOExceptione){e.printStackTrace();}}}
验证结果
编译使用javac编译如下类:
C:\Jackson_WORKSPACE>javacJacksonTester.java
现在运行 jacksonTester 看到结果如下:
C:\Jackson_WORKSPACE>javaJacksonTester
验证输出
Mahesh Kumar
21
false
[100, 90, 85]
¥ 我要打赏
纠错/补充
收藏
加QQ群啦,易百教程官方技术学习群
注意:建议每个人选自己的技术方向加群,同一个QQ最多限加 3 个群。
更多推荐


所有评论(0)