經由過程c++11改良我們的形式之改良敕令形式。本站提示廣大學習愛好者:(經由過程c++11改良我們的形式之改良敕令形式)文章只能為提供參考,不一定能成為您想要的結果。以下是經由過程c++11改良我們的形式之改良敕令形式正文
流式API讀取和寫入JSON內容團圓事宜。 JsonParser讀取數據,而JsonGenerator寫入數據。它是三者中最有用的辦法,是最低開支和最快的讀/寫操作。它相似於XML的Stax解析器。
在本文中,我們將展現的應用Jackson的流式API 讀寫JSON數據。流式API任務應用JSON為每個細節的都是要當心處置。上面的例子將應用兩個類:
JsonGenerator類——寫入JSON字符串。
sonGenerator是界說公共API編寫的Json內容的基類。應用JsonFactory實例的工場辦法創立實例。
類聲明
以下是org.codehaus.jackson.JsonGenerator類的聲明:
public abstract class JsonGenerator extends Object implements Closeable
嵌套類
結構函數
JsonParser類——解析JSON字符串。
JsonParser是界說公共API用於讀取的Json內容的基類。應用JsonFactory實例的工場辦法創立實例。
類聲明
以下是org.codehaus.jackson.JsonParser類的聲明:
public abstract class JsonParser extends Object implements Closeable, Versioned
嵌套類
結構函數
繼續的辦法
這個類繼續了以下類辦法:
java.lang.Object
應用JsonGenerator寫入JSON
應用JsonGenerator長短常簡略的。起首應用JsonFactory.createJsonGenerator()辦法創立一個JsonGenerator,並用write***()辦法來寫每個JSON值。
JsonFactory jasonFactory = new JsonFactory();
JsonGenerator jsonGenerator = jasonFactory.createJsonGenerator(new File(
"student.json"), JsonEncoding.UTF8);
// {
jsonGenerator.writeStartObject();
// "name" : "Mahesh Kumar"
jsonGenerator.writeStringField("name", "Mahesh Kumar");
讓我們來看看JsonGenerator操作。創立一個名為JacksonTester的Java類文件在目次 C:\>Jackson_WORKSPACE.
File: JacksonTester.java
import java.io.File;
import java.io.IOException;
import java.util.Map;
import org.codehaus.jackson.JsonEncoding;
import org.codehaus.jackson.JsonFactory;
import org.codehaus.jackson.JsonGenerator;
import org.codehaus.jackson.JsonParseException;
import org.codehaus.jackson.map.JsonMappingException;
import org.codehaus.jackson.map.ObjectMapper;
public class JacksonTester {
public static void main(String args[]){
JacksonTester tester = new JacksonTester();
try {
JsonFactory jasonFactory = new JsonFactory();
JsonGenerator jsonGenerator = jasonFactory.createJsonGenerator(new File(
"student.json"), JsonEncoding.UTF8);
// {
jsonGenerator.writeStartObject();
// "name" : "Mahesh Kumar"
jsonGenerator.writeStringField("name", "Mahesh Kumar");
// "age" : 21
jsonGenerator.writeNumberField("age", 21);
// "verified" : false
jsonGenerator.writeBooleanField("verified", false);
// "marks" : [100, 90, 85]
jsonGenerator.writeFieldName("marks");
// [
jsonGenerator.writeStartArray();
// 100, 90, 85
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]
//}
ObjectMapper mapper = new ObjectMapper();
Map<String,Object> dataMap = mapper.readValue(new File("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 (JsonParseException e) {
e.printStackTrace();
} catch (JsonMappingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
驗證成果
應用javac編譯以下類:
C:\Jackson_WORKSPACE>javac JacksonTester.java
如今運轉jacksonTester看到的成果:
C:\Jackson_WORKSPACE>java JacksonTester
驗證輸入
Mahesh Kumar 21 false [100, 90, 85]
應用JsonParser 讀取JSON
應用JsonParser長短常簡略的。起首應用JsonFactory.createJsonParser()辦法創立JsonParser,並應用它的nextToken()辦法來讀取每一個JSON字符串作為標志。檢討每一個令牌和響應的進程。
JsonFactory jasonFactory = new JsonFactory();
JJsonParser jsonParser = jasonFactory.createJsonParser(new File("student.json"));
while (jsonParser.nextToken() != JsonToken.END_OBJECT) {
//get the current token
String fieldname = jsonParser.getCurrentName();
if ("name".equals(fieldname)) {
//move to next token
jsonParser.nextToken();
System.out.println(jsonParser.getText());
}
}
讓我們來看看JsonParser的操作。創立一個名為JacksonTester在Java類在文件夾 C:\>Jackson_WORKSPACE.
文件: JacksonTester.java
import java.io.File;
import java.io.IOException;
import org.codehaus.jackson.JsonEncoding;
import org.codehaus.jackson.JsonFactory;
import org.codehaus.jackson.JsonGenerator;
import org.codehaus.jackson.JsonParseException;
import org.codehaus.jackson.JsonParser;
import org.codehaus.jackson.JsonToken;
import org.codehaus.jackson.map.JsonMappingException;
public class JacksonTester {
public static void main(String args[]){
JacksonTester tester = new JacksonTester();
try {
JsonFactory jasonFactory = new JsonFactory();
JsonGenerator jsonGenerator = jasonFactory.createJsonGenerator(new File(
"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]
//}
JsonParser jsonParser = jasonFactory.createJsonParser(new File("student.json"));
while (jsonParser.nextToken() != JsonToken.END_OBJECT) {
//get the current token
String fieldname = jsonParser.getCurrentName();
if ("name".equals(fieldname)) {
//move to next token
jsonParser.nextToken();
System.out.println(jsonParser.getText());
}
if("age".equals(fieldname)){
//move to next token
jsonParser.nextToken();
System.out.println(jsonParser.getNumberValue());
}
if("verified".equals(fieldname)){
//move to next token
jsonParser.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 (JsonParseException e) {
e.printStackTrace();
} catch (JsonMappingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
驗證成果
編譯應用javac編譯以下類:
C:\Jackson_WORKSPACE>javac JacksonTester.java
如今運轉 jacksonTester 看到成果以下:
C:\Jackson_WORKSPACE>java JacksonTester
驗證輸入
Mahesh Kumar 21 false [100, 90, 85]