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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

004_Gson树模型

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

1. 樹模型準(zhǔn)備JSON文檔的內(nèi)存樹表示。它構(gòu)建了一個(gè)JsonObject節(jié)點(diǎn)樹。它是一種靈活的方法, 類似于XML的DOM解析器。

2. 從JSON創(chuàng)建樹

2.1. 在讀取JSON之后, JsonParser提供指向樹的根節(jié)點(diǎn)的指針。根節(jié)點(diǎn)可用于遍歷完整的樹。請(qǐng)考慮以下代碼段以獲取提供的JSON字符串的根節(jié)點(diǎn)。

JsonParser parser = new JsonParser(); String jsonString = "{\"name\":\"張三\", \"age\":21,\"isMale\":false,\"marks\": [100,90,85]}"; JsonElement rootNode = parser.parse(jsonString);

3. 遍歷樹模型

3.1. 在遍歷樹并處理數(shù)據(jù)時(shí), 使用到根節(jié)點(diǎn)的相對(duì)路徑獲取每個(gè)節(jié)點(diǎn)。以下代碼段顯示了如何遍歷樹。

JsonObject details = rootNode.getAsJsonObject();JsonElement nameNode = details.get("name"); System.out.println("name: " +nameNode.getAsString());JsonElement ageNode = details.get("age"); System.out.println("age: " + ageNode.getAsInt());

4. 例子

4.1. 新建一個(gè)名為GsonStream的Java項(xiàng)目, 同時(shí)添加相關(guān)jar包。

4.2. 新建student.java

package com.fj.t;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 + "]";} }

4.3. 新建App1.java

?

package com.fj.t;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.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonParser; import com.google.gson.reflect.TypeToken;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\"}}";JsonParser parser = new JsonParser();JsonElement rootNode = parser.parse(jsonString);Student student = new Student();if (rootNode.isJsonObject()) {JsonObject rootJO = rootNode.getAsJsonObject();student.setId(rootJO.get("id").getAsInt());student.setName(rootJO.get("name").getAsString());student.setMale(rootJO.get("isMale").getAsBoolean());JsonArray sanWeiJA = rootJO.getAsJsonArray("sanWei");Integer[] sanWei = new Integer[sanWeiJA.size()];for (int i = 0; i < sanWeiJA.size(); i++) {sanWei[i] = sanWeiJA.get(i).getAsJsonPrimitive().getAsInt();}student.setSanWei(sanWei);JsonArray familyMembersJA = rootJO.getAsJsonArray("familyMembers");Collection<String> familyMembers = new ArrayList<String>();for (int i = 0; i < familyMembersJA.size(); i++) {familyMembers.add(familyMembersJA.get(i).getAsJsonPrimitive().getAsString());}student.setFamilyMembers(familyMembers);Map<String, String> scores = new HashMap<String, String>();JsonObject scoresJO = rootJO.getAsJsonObject("scores");scores.put("chinese", scoresJO.get("chinese").getAsString());scores.put("english", scoresJO.get("english").getAsString());scores.put("math", scoresJO.get("math").getAsString());student.setScores(scores);}System.out.println(student);Type studentType = new TypeToken<Student>(){}.getType();GsonBuilder builder = new GsonBuilder();Gson gson = builder.create(); // T fromJson(JsonElement json, Class<T> classOfT)將指定的json解析樹反序列化為指定類的對(duì)象。System.out.println(gson.fromJson(rootNode, Student.class)); // T fromJson(JsonElement json, Type typeOfT)將指定的json解析樹按指定類型的適配器將其反序列化為對(duì)象。System.out.println((Student)gson.fromJson(rootNode, studentType));} }

4.4. 運(yùn)行App1.java

4.5. 新建App2.java

package com.fj.t;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.JsonElement; import com.google.gson.JsonIOException; import com.google.gson.reflect.TypeToken; import com.google.gson.stream.JsonWriter;public class App2 {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();// JsonElement toJsonTree(Object src)將指定的對(duì)象序列化為解析樹。JsonElement je = gson.toJsonTree(student); // String toJson(JsonElement jsonElement)將指定的json解析樹序列化為JSON字符串。System.out.println(gson.toJson(je));// JsonElement toJsonTree(Object src, Type typeOfSrc) 將指定的對(duì)象按指定類型的適配器將其序列化為解析樹。JsonElement jeT = gson.toJsonTree(student, studentType);try {FileWriter fileWriter = new FileWriter(new File("student.txt")); // void toJson(JsonElement jsonElement, Appendable writer)將指定的json解析樹序列化為writer。gson.toJson(jeT, fileWriter);fileWriter.flush();fileWriter.close();} catch (JsonIOException | IOException e) {e.printStackTrace();}Writer out = new StringWriter();JsonWriter jw = new JsonWriter(out); // void toJson(JsonElement jsonElement, JsonWriter writer)將指定的json解析樹序列化為writer。gson.toJson(jeT, jw);System.out.println(out.toString());} }

4.6. 運(yùn)行App2.java, 在項(xiàng)目根目錄創(chuàng)建了student.txt

《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

總結(jié)

以上是生活随笔為你收集整理的004_Gson树模型的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

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