Json和其序列化和反序列化
最近經常在說Json傳值,Json序列化,什麼是Json?什麼又是Json的序列化和反序列化?
什麼是 JSON ?
大家是否知道Json的全稱?—JavaScript Object Notation(JavaScript 物件表示法),說白了Json就是一種字串,一種帶有格式的字串,一種可讀性很強,操作方便的字串。因為Json字串儲存資訊的方式和hashtable,Dictionary一樣都是鍵值對的形式。
Json的結構很簡單,也很複雜。簡單是因為Json的結構只有兩種:物件和陣列。
物件和陣列大家都很熟悉,在JS中物件的表示為“{}”括起來的內容,資料結構為 {key:value,key:value,…}的鍵值對的結構,在面向物件的語言中,key為物件的屬性,value為對應的屬性值,所以很容易理解,取值方法為 “物件.key” 獲取屬性值,這個屬性值的型別可以是 數字、字串、陣列、物件幾種。
陣列:陣列在js中是中括號“[]”括起來的內容,資料結構為 [” 數值1”,”數值2”,”數值3”,…],取值方式和其他語言中一樣,使用索引獲取,欄位值的型別和上面物件的屬性值一樣,可以是 數字、字串、陣列、物件幾種。
說Json結構複雜是因為:Json可以通過物件、陣列這2種結構的組合,從而形成任何複雜的資料結構。
Json例項:
{
"學生":
[
{"姓名":"小明","年齡":23},
{"姓名":"大憨","年齡":24}
]
}
上面這個Json物件,包含一個名為學生的陣列,陣列中的每條記錄又是一個Json物件。物件有兩個屬性分別為:姓名和年齡。這就是一個既包含陣列也包含物件的Json例項
說道Json是作為一種儲存和交換文字資訊的語法,這使我不得不想到XML。因為XML在這方面也是高手。他們有什麼異同呢?
相同之處,他們都是純文字,且有一定的格式都夠儲存傳輸資料,可以用JS來對其進行解析。不同之處在於,Json沒有結束標籤,格式相對簡單,能夠使用內建的 JavaScript eval() 方法進行解析。
除了上述之外,JSON和XML還有另外一個很大的區別在於有效資料率。JSON作為資料包格式傳輸的時候具有更高的效率,這是因為JSON不像XML那樣需要有嚴格的閉合標籤,這就讓有效資料量與總資料包比大大提升,從而減少同等資料流量的情況下,網路的傳輸壓力 。
Json的序列化和反序列化
這裡的序列化主要就是為了傳輸方便,將要傳輸的物件序列化為二進位制的資料流,效率極高,接收時通過反序列化轉化成物件,從而達到一個傳輸的效果。簡單點來說,序列化就是將物件轉換成Json格式的字串,反序列化就是逆過程,將Json串轉換成物件。
例項
JS程式碼:建立學生物件陣列
var stucheck = [ {"姓名":"小明","年齡":23},{"姓名":"大憨","年齡":24}]
//用stringify函式將物件stucheck序列化,提交到後臺,增加分享記錄
$.ajax({
type: "POST",
url: "/VideoPlayer/AddVideoShareRecordList",
data: { stuList: JSON.stringify(stucheck) },
success: function (data) {
if (data == true) {
alert("分享視訊成功!");
} else {
alert("分享失敗,請檢查網路!");
}
}
});
後臺解析:
public bool AddStuRecordList()
{
//獲取Json串
string stuList = Request["stuList"];
//宣告一個學生的實體集合
List<StuRecord> stuAddList = new List<StuRecord>();
//宣告一個servializer 類用來完成Json的反序列化
JavaScriptSerializer servializer = new JavaScriptSerializer();
//完成Json的反序列化
stuAddList = servializer.Deserialize<List<StuRecord>>(stuList);
bool isok = AddRecordList(stuAddList);
return isok;
}
注意:JS中的物件和後臺中的物件應該保持一致,才能完全轉換。在後臺進行序列化和反序列化需要引入外掛,JavaScriptSerializer 或者 Newtonsoft.Json.JsonConvert,新增引用即可。
以上就是對Json的一些簡單瞭解,不正確的地方請指出。
相關推薦
python3 中的Json序列化、反序列化 和 字符編碼的問題解決
ron bsp port imp 入參 oos elf asc 反序列化 python3在通過Json往文件裏寫內容時中文字符被轉成unicode編碼 import json class file_open(object): f = open(‘c
logger模塊使用和序列化,反序列化
dir RR sys.path pre utf 給他 inf 編寫 根目錄 再將之前我們首先需要了解一下軟件開發目錄的規範: 開發基本目錄 2.定制程序入口 1、要在start.py處要把絕對路徑寫出來 import sys,os # 應該把項目的根目錄添加到環境
0016-Avro序列化&反序列化和Spark讀取Avro資料
溫馨提示:要看高清無碼套圖,請使用手機開啟並單擊圖片放大檢視。 1.簡介 本篇文章主要講如何使用java生成Avro格式資料以及如何通過spark將Avro資料檔案轉換成DataSet和DataFrame進行操作。 1.1Apache Arvo是什麼? Apache Avro 是一個數據序列
list 分頁工具類 和序列化、反序列化
public static byte[] serializeObject(Object object) { ByteArrayOutputStream saos = new ByteArrayOutputStream(); Ob
java基礎之序列化 Java物件表示方式1:序列化、反序列化和transient關鍵字的作用
轉載自https://www.cnblogs.com/szlbm/p/5504166.html Java物件表示方式1:序列化、反序列化和transient關鍵字的作用 平時我們在Java記憶體中的物件,是無 法進行IO操作或者網路通訊的
java序列化與反序列化中transient和static成員剖析
在我的上一篇博文中講解了一些基本的關於java序列化與反序列化的問題,現在我們一起來對物件中宣告為transient和static的變數進行解析。 1:類中宣告為transient變數 一旦類中某個變數宣告為transient,則會告訴JVM,你不用幫我序列化該變數,我自己
java基礎序列化、反序列化和transient的作用
一、概念為什麼會有序列化?平時我們所說的java記憶體中的物件是無法進行網路通訊和IO操作的,物件將以序列化的儲存狀態(表現形式)被它們所識別。序列化:將一個物件轉換成一串二進位制表示的位元組陣列,通過儲存或轉移這些位元組陣列達到持久化的目的。反序列化:將位元組陣列重組成物件
擴展方法對json序列化及反序列化
runt mes get int esp () exceptio new ask this+類型名+變量名,.NET 3.0 之後新增的一種特性,叫“擴展方法”。 int類型變量都能調用toString()方法,將int類型變量轉換成string
如何使用 JSON for Modern C++ 序列化與反序列號,換行符導致序列化失敗
http gb2 elf ldp c++ spi ssp 使用 b16 W48z士5742i4鍁鉀http://shequ.docin.com/qbvl66336 6j夠裝何掖tj嘔蔡5VLhttp://tushu.docin.com/olybb166 渤k搶97L巳綱鋅7
模塊講解----json模塊(跨平臺的序列化與反序列化)
/usr 列表 strong 序列化 類型轉換 min 字符 虛擬 json 一、json的特點 1、只能處理簡單的可序列化的對象;(字典,列表,元祖) 2、json支持不同語言之間的數據交互;(python - go,python - java) 二、使用場
JSON序列化與反序列化
class a using demo pos define sys ali convert lose 1.add reference [System.Runtime.Serializatio] 2.using [System.Runtime.Serialization] a
Python序列化與反序列化-json與pickle
day 存儲 什麽 pychar odi 兩個 對象 .cn 序列化 Python序列化與反序列化-json與pickle 作者:尹正傑 版
JSON 序列化與反序列化(-)泛型 及 java.lang.reflect.Type
限定 完成 ica 所有 void 數據類型 HR ble DC Type及其子接口的來歷 泛型出現之前的類型 沒有泛型的時候,只有原始類型。此時,所有的原始類型都通過字節碼文件類Class類進行抽象。Class類的一個具體對象就代表一個指定的原始類型。 泛型出現之後的類型
使用 JSON JavaScriptSerializer 進行序列化或反序列化時出錯
ali rac service ons trac 字符 max sta spa 如題 報錯提示: 使用 JSON JavaScriptSerializer 進行序列化或反序列化時出錯。字符串的長度超過了為 maxJsonLength 屬性設置的值。","StackTra
75、JSON與對象的序列化與反序列化
-i ack tco inline order eight .com blog 技術分享 75、JSON與對象的序列化與反序列化
python序列化與反序列化(json與pickle)
類型 成了 數據類型 進行 pick 直接 python 優點 一個 在python中,序列化可以理解為將python中對象的編碼格式轉換為json(pickle)格式的字符串,而反序列化可以 理解為將json(pickle)格式的字符串轉換為python中對象的編碼格式
json序列化與反序列化(基礎)
創建 反序 key open 通用 json 方式 () text import json # json是所有語言裏通用的 info={‘key‘:‘mode‘,‘lis‘:‘koud‘,‘olo‘:234,} json序列化(只支持簡單的數據類型) f=open(&quo
JSON繼承JsonConverter序列化與反序列化重寫類屬性
首先自定義一個JSON類,繼承JsonConverter,把類的屬性重寫到JSON中. using System; using System.Collections.Generic; using System.Linq; using Sys
MVC JSON JavaScriptSerializer 進行序列化或反序列化時出錯
MVC control中返回json格式資料一般都是如下格式 [HttpPost] public ActionResult CaseAudit(string name) { var data ="dasda";
JSON 序列化與反序列化(二)使用TypeReference 構建型別安全的異構容器
原文連結:https://www.cnblogs.com/yuyutianxia/p/6051682.html 1. 泛型通常用於集合,如Set和Map等。這樣的用法也就限制了每個容器只能有固定數目的型別引數,一般來說,這也確實是我們想要的。 然而有的時候我們需要更多的靈活性,如資料庫可以用