日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

003_Gson流

發(fā)布時間:2025/4/17 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 003_Gson流 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1. Streaming API將JSON內(nèi)容分為讀寫事件。JsonReader和JsonWriter將數(shù)據(jù)讀/寫為令牌, 稱為JsonToken。

2. 它是處理JSON的三種方法中最強大的方法。它具有最低的開銷, 并且在讀/寫操作中非常快。它類似于XML的Stax解析器。

3. 例子

3.1. 新建一個名為GsonStream的Java項目, 同時添加相關jar包。

3.2. 新建Student.java

package com.fj.s;import java.io.Serializable; import java.util.Arrays; import java.util.Collection; import java.util.Map;public class Student implements Serializable {private static final long serialVersionUID = 1L;private Integer id;private String name;private Boolean isMale;private Integer[] sanWei;private Collection<String> familyMembers;private Map<String, String> scores;public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Boolean isMale() {return isMale;}public void setMale(Boolean isMale) {this.isMale = isMale;}public Integer[] getSanWei() {return sanWei;}public void setSanWei(Integer[] sanWei) {this.sanWei = sanWei;}public Collection<String> getFamilyMembers() {return familyMembers;}public void setFamilyMembers(Collection<String> familyMembers) {this.familyMembers = familyMembers;}public Map<String, String> getScores() {return scores;}public void setScores(Map<String, String> scores) {this.scores = scores;}@Overridepublic String toString() {return "Student [id=" + id + ", name=" + name + ", isMale=" + isMale + ", sanWei=" + Arrays.toString(sanWei)+ ", familyMembers=" + familyMembers + ", scores=" + scores + "]";} }

3.3. 新建App1.java

package com.fj.s;import java.io.IOException; import java.io.StringReader; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.List; import java.util.Map; import com.google.gson.stream.JsonReader; import com.google.gson.stream.JsonToken;public class App1 {public static void main(String args[]) {String jsonString = "{\"id\":1111,\"name\":\"張三\",\"isMale\":false,\"sanWei\":[100,90,85],\"familyMembers\":[\"爸爸\",\"媽媽\",\"妹妹\"],\"scores\":{\"chinese\":\"90\",\"english\":\"90\",\"math\":\"100\"}}";JsonReader reader = new JsonReader(new StringReader(jsonString));Student student = new Student();try {handleJsonObject(reader, student);reader.close();} catch (IOException e) {e.printStackTrace();}System.out.println(student);}private static void handleJsonObject(JsonReader reader, Student student) throws IOException {reader.beginObject();String fieldName = null;Map<String, String> scores = null;while (reader.hasNext()) {JsonToken token = reader.peek();if (token.equals(JsonToken.BEGIN_ARRAY)) {handleJsonArray(reader, fieldName, student);} else if (token.equals(JsonToken.END_OBJECT)) {reader.endObject();return;} else {if (token.equals(JsonToken.NAME)) {// 獲取當前字段名fieldName = reader.nextName();}switch (fieldName) {case "scores":token = reader.peek();scores = new HashMap<String, String>();student.setScores(scores);handleJsonObject(reader, student);break;case "id":token = reader.peek();student.setId(reader.nextInt());break;case "name":token = reader.peek();student.setName(reader.nextString());break;case "isMale":token = reader.peek();student.setMale(reader.nextBoolean());break;case "chinese":token = reader.peek();student.getScores().put(fieldName, reader.nextString());break;case "english":token = reader.peek();student.getScores().put(fieldName, reader.nextString());break;case "math":token = reader.peek();student.getScores().put(fieldName, reader.nextString());break;}}}}private static void handleJsonArray(JsonReader reader, String fieldName, Student student) throws IOException {reader.beginArray();Collection<String> familyMembers = null;List<Integer> sanWei = null;while (true) {JsonToken token = reader.peek();if (token.equals(JsonToken.END_ARRAY)) {if("sanWei".equals(fieldName)) {student.setSanWei(sanWei.toArray(new Integer[0]));}reader.endArray();break;} else if (token.equals(JsonToken.BEGIN_OBJECT)) {handleJsonObject(reader, student);} else if (token.equals(JsonToken.END_OBJECT)) {reader.endObject();} else {switch (fieldName) {case "sanWei":if(sanWei == null) {sanWei = new ArrayList<Integer>();}sanWei.add(reader.nextInt());break;case "familyMembers":if(familyMembers == null) {familyMembers = new ArrayList<String>();student.setFamilyMembers(familyMembers);}familyMembers.add(reader.nextString());break;}}}} }

3.4. 運行App1.java

3.5. 新建App2.java

package com.fj.s;import java.io.FileReader; import java.io.IOException; import java.io.Reader; import java.io.StringReader; import java.lang.reflect.Type; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.JsonIOException; import com.google.gson.JsonSyntaxException; import com.google.gson.reflect.TypeToken; import com.google.gson.stream.JsonReader;public class App2 {public static void main(String[] args) {Type studentType = new TypeToken<Student>(){}.getType();String jsonString = "{\"id\":1111,\"name\":\"張三\",\"isMale\":false,\"sanWei\":[100,90,85],\"familyMembers\":[\"爸爸\",\"媽媽\",\"妹妹\"],\"scores\":{\"chinese\":\"90\",\"english\":\"90\",\"math\":\"100\"}}";GsonBuilder builder = new GsonBuilder();Gson gson = builder.create();// T fromJson(Reader json, Class<T> classOfT)將指定的json讀取器反序列化為指定類的對象。Reader stringReader = new StringReader(jsonString);System.out.println(gson.fromJson(stringReader, Student.class));// T fromJson(Reader json, Type typeOfT)將指定的json讀取器按指定類型的適配器將其反序列化為對象。try {Reader fileReader = new FileReader("student.json");System.out.println((Student)gson.fromJson(fileReader, studentType));fileReader.close();} catch (JsonIOException | JsonSyntaxException | IOException e) {e.printStackTrace();}// T fromJson(JsonReader reader, Type typeOfT)將指定的JsonReader按指定類型的適配器將其反序列化為對象。JsonReader jsonReader = new JsonReader(new StringReader(jsonString));System.out.println((Student)gson.fromJson(jsonReader, studentType));} }

3.6. 運行App2.java, 在項目目錄下生成student.json

3.7. 新建App3.java

package com.fj.s;import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.io.StringWriter; import java.io.Writer; import java.lang.reflect.Type; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.Map; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.JsonIOException; import com.google.gson.reflect.TypeToken; import com.google.gson.stream.JsonWriter;public class App3 {public static void main(String args[]) {Type studentType = new TypeToken<Student>(){}.getType();Student student = new Student();student.setId(1111);student.setName("張三");student.setMale(false);Integer[] sanWei = {100,90,85};student.setSanWei(sanWei);Collection<String> familyMembers = new ArrayList<String>();familyMembers.add("爸爸");familyMembers.add("媽媽");familyMembers.add("妹妹");student.setFamilyMembers(familyMembers);Map<String, String> scores = new HashMap<String, String>();scores.put("chinese", "90");scores.put("math", "100");scores.put("english", "90");student.setScores(scores);GsonBuilder builder = new GsonBuilder();Gson gson = builder.create();try { // void toJson(Object src, Type typeOfSrc, JsonWriter writer)將指定的對象按指定類型的適配器將其序列化為writer。寫入字符串流。Writer stringWriter = new StringWriter();gson.toJson(student, studentType, new JsonWriter(stringWriter));System.out.println(stringWriter.toString());stringWriter.close();// void toJson(Object src, Appendable writer)將指定的對象序列化為writer。寫入文件流。FileWriter fileWriter = new FileWriter(new File("student.txt"));gson.toJson(student, fileWriter);fileWriter.flush();fileWriter.close();} catch (JsonIOException | IOException e) {e.printStackTrace();}} }

3.8. 運行App3.java, 在項目目錄下生成student.txt

總結(jié)

以上是生活随笔為你收集整理的003_Gson流的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。