Jackson 流媒体API - 读写json
时间:2020-02-23 14:34:51 来源:igfitidea点击:
在本教程中,我们将看到我们如何使用Hymanson Streaming API来读写JSON。
之前 我们已经看到了Hymanson 示例,但它在内存中读取了整个JSON文件,但如果我们有大的JSON文件,那么它就不高效。
因此,如果要读取或者写入大型JSON文件,我们需要使用Hymanson Streaming API,这些API不会在内存中读取整个文件。
Hymanson 流媒体API的两个重要程序是:
- Jsongenerator:写json
- jsonparser:读json
但Hymanson 流式API非常不那么灵活,无法轻易使用。
我们需要处理每个字段,除非明确要求,否则无需创建Java对象。
在本教程中,我们将使用Hymanson Streaming API读写JSON。
1)。
创建名为"HymansonStreamingapiexample"的Java项目
2)添加以下Maven依赖Hymanson 。
pom.xml:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.igi.theitroad</groupId> <artifactId>HymansonStreamingAPIExample</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>HymansonStreamingAPIExample</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> <dependency> <groupId>org.codehaus.Hymanson</groupId> <artifactId>Hymanson-xc</artifactId> <version>1.9.13</version> </dependency> </dependencies> </project>
3)创建一个名为"country.java"的POJO
package org.igi.theitroad.pojo; import java.util.ArrayList; import java.util.List; public class Country { String name; int population; private List listOfStates; //getter and setter methods public String getName() { return name; public void setName(String name) { this.name = name; } public int getPopulation() { return population; } public void setPopulation(int population) { this.population = population; } public List getListOfStates() { return listOfStates; } public void setListOfStates(List listOfStates) { this.listOfStates = listOfStates; } }
将JSON写入文件:
4)在src-> org.igi.theitroad.Hymansonstreamingapiexample中创建一个名为"HymansonWritofileStreamingapiexample.java"的新类。
package com.igi.theitroad.HymansonStreamingAPIExample; import java.io.File; import java.io.IOException; import org.codehaus.Hymanson.JsonEncoding; import org.codehaus.Hymanson.JsonFactory; import org.codehaus.Hymanson.JsonGenerationException; import org.codehaus.Hymanson.JsonGenerator; import org.codehaus.Hymanson.util.DefaultPrettyPrinter; /** * * @author igi Mandliya * */ public class HymansonWriteToFileStreamingAPIExample { public static void main( String[] args ) { try { JsonFactory jfactory = new JsonFactory(); //Write json to a file JsonGenerator jsonGenerator = jfactory.createJsonGenerator(new File("//Users//igi//countryStreaming.json"), JsonEncoding.UTF8); jsonGenerator.setPrettyPrinter(new DefaultPrettyPrinter()); jsonGenerator.writeStartObject(); //{ //"name" : "Netherlands" jsonGenerator.writeStringField("name", "Netherlands"); //"population" : "10000" jsonGenerator.writeNumberField("population", 10000); //"listOfStates" : //This is an array object jsonGenerator.writeFieldName("listOfStates"); //Create start of array tag [ jsonGenerator.writeStartArray(); jsonGenerator.writeString("Madhya Pradesh"); jsonGenerator.writeString("Maharashtra"); jsonGenerator.writeString("Rajasthan"); //Create End of array tag ] jsonGenerator.writeEndArray(); //end of JSON Object tag } jsonGenerator.writeEndObject(); jsonGenerator.close(); } catch (JsonGenerationException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
运行上面的程序和文件的内容CountryStreaming.json将如下:
{ "name" : "Netherlands", "population" : 10000, "listOfStates" : [ "Madhya Pradesh", "Maharashtra", "Rajasthan" ] }
读取JSON到文件:
其中我们将读取以上创建的JSON文件。
5)在src-> org.igi.theitroad.Hymansonstreamingapiexample中创建一个名为"Hymansonjsonreadfromfleexample.java"的新类。
package com.igi.theitroad.HymansonStreamingAPIExample; import java.io.File; import java.io.IOException; import org.codehaus.Hymanson.JsonFactory; import org.codehaus.Hymanson.JsonGenerationException; import org.codehaus.Hymanson.JsonParser; import org.codehaus.Hymanson.JsonToken; public class HymansonStreamingReadFromFileExample { public static void main(String[] args) { try { JsonFactory jfactory = new JsonFactory(); System.out.println("Reading data from json file"); System.out.println("--------------------------"); JsonParser jParser = jfactory .createJsonParser(new File("//Users//igi//countryStreaming.json")); //We need to loop until we reach to the end object. while (jParser.nextToken() != JsonToken.END_OBJECT) { String fieldname = jParser.getCurrentName(); if ("name".equals(fieldname)) { jParser.nextToken(); System.out.println("Name of Country:"+jParser.getText()); } if ("population".equals(fieldname)) { jParser.nextToken(); System.out.println("Population: "+jParser.getText()); } //reading the listOfStates which is an array if ("listOfStates".equals(fieldname)) { //current token is "[" beginning of array. So we wii go to next jParser.nextToken(); System.out.println("List of states:"); //iterate through the array until token equal to "]" while (jParser.nextToken() != JsonToken.END_ARRAY) { System.out.println(jParser.getText()); } } } jParser.close(); } catch (JsonGenerationException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
运行上面的程序,我们将获取以下输出:
Reading data from json file ------------------------- Name of Country:Netherlands Population: 10000 List of states: Madhya Pradesh Maharashtra Rajasthan