1. 程式人生 > >Json和其序列化和反序列化

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序列序列中transientstatic成員剖析

在我的上一篇博文中講解了一些基本的關於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等。這樣的用法也就限制了每個容器只能有固定數目的型別引數,一般來說,這也確實是我們想要的。 然而有的時候我們需要更多的靈活性,如資料庫可以用