通透[email protected]註解、@SerializedName、解析js
在講如何解析資料之前,先描述一下gson中的兩個註解@Expose和@SerializedName。
@Expose註解的作用:區分實體中不想被序列化的屬性,其自身包含兩個屬性deserialize(反序列化)和serialize(序列化),預設都為true。
使用 new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();建立Gson物件,沒有@Expose註釋的屬性將不會被序列化.。
這樣create() gson物件序列化user,只會有name這一個屬性private class User{ private int id; @Expose private String name; ....... }
@SerializedName註解的作用:定義屬性序列化後的名稱
public class User{
private int id;
@Expose
@SerializedName("username")
private String name;
.......
}
另外想要不序列化某個屬性,也可以使用transient。
private class User{ private int id; private transient String name; ....... }
下面列舉一下gson如何解析json資料的
//轉換器 GsonBuilder builder = new GsonBuilder(); <span style="color:#ff0000;">// 不轉換沒有 @Expose 註解的欄位</span> builder.excludeFieldsWithoutExposeAnnotation(); Gson gson = builder.create(); <span style="color:#ff0000;">//1、物件轉string</span> Student stu = new Student(); stu.setStudentId(333); stu.setStudentName("qqq"); String stuStr = gson.toJson(stu); System.out.println(stuStr); //{"studentName":"qqq","studentId":333} <span style="color:#ff0000;">//2、string轉物件</span> Student user2 = gson.fromJson(stuStr, Student.class); System.out.println(user2); String stuTemp = "{\"studentName\":\"qqq2\",\"studentId\":3335}"; Student user4 = gson.fromJson(stuTemp, Student.class); System.out.println(user4); <span style="color:#ff0000;">//3、物件List轉string</span> List<Student> testBeanList = new ArrayList<Student>(); Student testBean = new Student(); testBean.setStudentId(555); testBean.setStudentName("552"); testBeanList.add(testBean); //Gson gsonList = new Gson(); Type type = new TypeToken<List<Student>>(){}.getType(); //指定集合物件屬性 String beanListToJson = gson.toJson(testBeanList, type); System.out.println(beanListToJson); //[{"studentName":"552","studentId":555}] <span style="color:#ff0000;">//集合string轉物件list</span> List<Student> testBeanListFromJson = gson.fromJson(beanListToJson, type); System.out.println(testBeanListFromJson); //[555:552] <span style="color:#ff0000;">//4、集合如果不指定型別 預設為String</span> List<String> testList = new ArrayList<String>(); testList.add("first"); testList.add("second"); String listToJson = gson.toJson(testList); System.out.println(listToJson); //["first","second"] <span style="color:#ff0000;">//5、集合字串轉回來需要指定型別</span> List<String> testList2 = (List<String>) gson.fromJson(listToJson,new TypeToken<List<String>>() {}.getType()); System.out.println(testList2); <span style="color:#ff0000;">//6、 將HashMap字串轉換為 JSON</span> Map<String, String> testMap = new HashMap<String, String>(); testMap.put("id", "id.first"); testMap.put("name", "name.second"); String mapToJson = gson.toJson(testMap); System.out.println(mapToJson); //{"id":"id.first","name":"name.second"} <span style="color:#ff0000;">//7、stringMap轉物件</span> Map<String, String> userMap2 = (Map<String, String>) gson.fromJson(mapToJson,new TypeToken<Map<String, String>>() {}.getType()); System.out.println(userMap2); //{id=id.first, name=name.second} <span style="color:#ff0000;">//8、物件含有普通物件、集合、map情況</span> Student user1 = new Student(); user1.setStudentId(1001); user1.setStudentName("張三"); Student user3 = new Student(); user3.setStudentId(1002); user3.setStudentName("李四"); Map<String, Student> userMap = new HashMap<String, Student>(); userMap.put("user1", user1); userMap.put("user3", user3); List<Student> userList = new ArrayList<Student>(); userList.add(user1); userList.add(user3); Teacher groupBean = new Teacher(); groupBean.setStudent(user1); groupBean.setStus(userList); groupBean.setMap((HashMap)userMap); //groupBean.setUserList(userList); Gson gsonGroup = new Gson(); String sGroupBean = gsonGroup.toJson(groupBean, new TypeToken<Teacher>() {}.getType()); System.out.println(sGroupBean); /*{"stus":[{"studentName":"張三","studentId":1001},{"studentName":"李四","studentId":1002}],"student":{"studentName":"張三","studentId":1001},"map":{"user3":{"studentName":"李四","studentId":1002},"user1":{"studentName":"張三","studentId":1001}},"id":0,"age":0}*/ <span style="color:#ff0000;">//9、複雜物件string轉物件</span> Teacher groupBean2 = (Teacher) gson.fromJson(sGroupBean,new TypeToken<Teacher>() {}.getType()); System.out.println(groupBean2); package com.andtools; import com.google.gson.annotations.Expose; public class Student { @Expose private String studentName; @Expose private int studentId; public Student(){} public Student(int studentId,String studentName){ this.setStudentId(studentId); this.setStudentName(studentName); } public String toString(){ return this.getStudentId() + ":" + this.getStudentName(); } public String getStudentName() { return studentName; } public void setStudentName(String studentName) { this.studentName = studentName; } public int getStudentId() { return studentId; } public void setStudentId(int studentId) { this.studentId = studentId; } } package com.andtools; import java.util.HashMap; import java.util.List; import java.util.Map; import com.google.gson.annotations.Expose; public class Teacher { @Expose private int id; @Expose private String name; @Expose private int age; @Expose private Student student; @Expose private List stus; @Expose private HashMap map; public String toString(){ return this.getId()+":"+this.getName()+":"+this.getAge() +":"+ this.getStudent().toString() + ":" + this.getStus() + ":" + this.getMap(); } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public Student getStudent() { return student; } public void setStudent(Student student) { this.student = student; } public List getStus() { return stus; } public void setStus(List stus) { this.stus = stus; } public HashMap getMap() { return map; } public void setMap(HashMap map) { this.map = map; } }
相關推薦
通透<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="95d2e6fafbd5d0ede5fae6f0">[email160;protected]a>註解、@SerializedName、解析js
在講如何解析資料之前,先描述一下gson中的兩個註解@Expose和@SerializedName。 @Expose註解的作用:區分實體中不想被序列化的屬性,其自身包含兩個屬性deserialize(反序列化)和serialize(序列化),預設都為true。 使用 new
shell腳本中的$# $0 <a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="f8dcb8">[email160;protected]a> $* $$ $! $?的意義
腳本 $* width 上一個 pre shell int .cn height 轉載自:http://www.cnblogs.com/davygeek/p/5670212.html 今天學寫腳本遇到一些變量不認識,在此做下記錄。 變量 含義 $0 當前腳本的文件
shell中$*與<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="b296f2">[email160;protected]a>的區別
劃分 位置 一個 這也 差異 獨立 [email protected] 情況 雙引號 $*所有的位置參數,被作為一個單詞 註意:"$*"必須被""引用 [email protected] 與$*同義,但是每個參數都是一個獨立的""引用字串,這就意味著參數
Spring4.0系列<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="aa9f87eae9c5c4cec3dec3c5c4cbc6">[email160;protected]a>
one window 標識 cto ace ted ada bsp 布爾 這篇文章介紹Spring 4的@Conditional註解。在Spring的早期版本你可以通過以下方法來處理條件問題: 3.1之前的版本,使用Spring Expression Langua
Spring高級話題<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="b29ff2f7dcd3d0ded7">[email160;protected]a>***註解的工作原理
sso metadata bool logs tcl task ota -c ann 出自:http://blog.csdn.net/qq_26525215 @EnableAspectJAutoProxy @EnableAspectJAutoProxy註解 激活Aspe
<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="297a595b40474e69685c5d465e405b4c4d">[email160;protected]a>註解與自動裝配(轉發)
配置 調用方法 support autowired 信息 ann over 反射機制 test 1 配置文件的方法我們編寫spring 框架的代碼時候。一直遵循是這樣一個規則:所有在spring中註入的bean 都建議定義成私有的域變量。並且要配套寫上 get 和 se
linux bash Shell特殊變數:Shell $0, $#, $*, <a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="8aaeca">[email160;protected]a>, $?
在linux下配置shell引數說明 前面已經講到,變數名只能包含數字、字母和下劃線,因為某些包含其他字元的變數有特殊含義,這樣的變數被稱為特殊變數。 例如,$ 表示當前Shell程序的ID,即pid,看下面的程式碼: [[email protected] /]$ ec
spring <a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="62000d0d16222103010a0703000e07">[email160;protected]a>中value的理解
先看原始碼 /** * Names of the caches in which method invocation results are stored. * <p>Names may be used to determine the target cache (or cac
{<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="733e3c3f3f2a342136363d203323213c273c3d3e323a3f5d303c3e">[email160;protecte
近日,復旦解密安全團隊發現GandCrab4.0活躍度提升,跟蹤到多起GandCrab4.0變種勒索事件,現釋出安全預警,提醒廣大使用者預防GandCrab4.0勒索。 目前復旦解密已經可以成功解密GandCrab4.0變種採用RSA+AES加密演算法 mg中毒檔案可以在一個小時解決.電話151691214
Springboot註解<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="260b0b666549485254494a4a4354">[email160;protected]a>和@RestCon
1.使用@Controller 註解,在對應的方法上,檢視解析器可以解析return 的jsp,html頁面,並且跳轉到相應頁面;若返回json等內容到頁面,則需要加@ResponseBody註解 [email protected]註解,相當於@[email protected
<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="5b2c3e391b33">[email160;protected]a>,c小總結
問題0:元素內聯元素,行內元素,行內塊元素. 內聯: 寬高M,P都有效 行內元素:無寬高,內容撐開,M,P左右有效
SQL Server資料庫mdf檔案中了勒索病毒<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="fc9f8e858c889998a39d8f9d9293bc9f939f97">[email160;p
SQL,資料庫,勒索病毒,mdf檔案中毒,[email protected]_email *SQL Server資料庫mdf檔案中了勒索病毒[email protected]_email。副檔名變為[email protected]_email SQL Serv
<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="5400313a273b2632383b2379142032">[email160;protected]a>_export詳解
Tensorflow經常看到定義的函式前面加了“@tf_export”。例如,tensorflow/python/platform/app.py中有: @tf_export('app.run') def run(main=None, argv=None): """Runs the progr
手把手教你搭建React Native 開發環境 - ios篇 (React <a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="eda38c99849b88adddc3d8d8c3d9">[email
由於之前我是h5的,沒接觸過ios和安卓, 也不瞭解xcode配置,所以 建議學reace-native之前還是先去了解一下ios和安卓開發環境搭建等問題。 環境下載及配置 nodejs:https://nodejs.org/en/download/ 設定淘寶映象 $ npm con
<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="4978382833093e3a3179797878">[email160;protected]a>
function changeSpan(){ var f = document.getElementById("file1").files; &nb
SpringBoot學習<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="b7e8f7e7c5d8c7d2c5c3cee4d8c2c5d4d2">[email160;protected]a>&am
文章目錄 @PropertySource:載入指定的配置檔案 @ImportResource:匯入Spring的配置檔案,讓配置檔案裡面的內容生效; @Bean @PropertySource:載入指定的配置檔案
eclipse支援@<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="95d2f0e1e1f0e7d5c6f0e1e1f0e7">[email160;protected]a>註解使用 -轉載
1. 下載lombok.jar 2.將下載的lombok.jar放在你的eclipse安裝目錄下,如圖: 3.修改eclipse.ini檔案,新增如下兩行配置: -Xbootclasspath/a:lombok.jar -javaage
無法解析的外部符號 <a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="1e41497770537f77705e2f28">[email160;protected]a>,該符號在函式 ___tmai
#include using namespace std; int main() { cout <<“This is a C++ program.”; return 0; } 1>------ 已啟動生成: 專案: hello1, 配置: Debug Win32 ---
<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="ce9eb7baa6a1a08ea4afb8af">[email160;protected]a>@C 比較
對所有的程式語言,他們的最後的目的其實就是兩種:提高硬體的執行效率和提高程式設計師的開發效率。 遺憾的是,這兩點是不可能並存的!你只能選一樣。在提高硬體的執行效率這一方面,C語言沒有競爭者!舉個簡單的例子,實現一個列表,C語言用陣列int a[3],經過編譯以後變成了(基地址+偏移量)的方式。對
<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="762506041f18113b203529363b1912131a370202041f14030213">[email160;protected]<
有 @ModelAttribute 標記的方法, 會在每個目標方法執行之前被 SpringMVC 呼叫 <form action="springmvc/TestModelAttribute" method="post"> 使用者名稱<input