溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

有關(guān)JSON的詳細(xì)介紹

發(fā)布時間:2021-08-25 09:58:58 來源:億速云 閱讀:160 作者:chen 欄目:開發(fā)技術(shù)

這篇文章主要介紹“有關(guān)JSON的詳細(xì)介紹”,在日常操作中,相信很多人在有關(guān)JSON的詳細(xì)介紹問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”有關(guān)JSON的詳細(xì)介紹”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!

JSON詳解:

JSON的全稱是”JavaScript Object Notation”,意思是JavaScript對象表示法,它是一種基于文本,獨立于語言的輕量級數(shù)據(jù)交換格式。XML也是一種數(shù)據(jù)交換格式,為什么沒有選擇XML呢?因為XML雖然可以作為跨平臺的數(shù)據(jù)交換格式,但是在JS(JavaScript的簡寫)中處理XML非常不方便,同時XML標(biāo)記比數(shù)據(jù)多,增加了交換產(chǎn)生的流量,而JSON沒有附加的任何標(biāo)記,在JS中可作為對象處理,所以我們更傾向于選擇JSON來交換數(shù)據(jù)。這篇文章主要從以下幾個方面來說明JSON。

1,JSON的兩種結(jié)構(gòu)2,認(rèn)識JSON字符串3,在JS中如何使用JSON4,在.NET中如何使用JSON5,總結(jié)

一、JSON的兩種結(jié)構(gòu)

JSON有兩種表示結(jié)構(gòu),對象和數(shù)組。對象結(jié)構(gòu)以”{”大括號開始,以”}”大括號結(jié)束。中間部分由0或多個以”,”分隔的”key(關(guān)鍵字)/value(值)”對構(gòu)成,關(guān)鍵字和值之間以”:”分隔,語法結(jié)構(gòu)如代碼。

{    key1:value1,    key2:value2,    ...}

其中關(guān)鍵字是字符串,而值可以是字符串,數(shù)值,true,false,null,對象或數(shù)組

數(shù)組結(jié)構(gòu)以”[”開始,”]”結(jié)束。中間由0或多個以”,”分隔的值列表組成,語法結(jié)構(gòu)如代碼。

[    {        key1:value1,        key2:value2     },    {         key3:value3,         key4:value4       }]

二、認(rèn)識JSON字符串

之前我一直有個困惑,分不清普通字符串,json字符串和json對象的區(qū)別。經(jīng)過一番研究終于給弄明白了。比如在js中。

字符串:這個很好解釋,指使用“”雙引號或’’單引號包括的字符。例如:var comStr = 'this is string';json字符串:指的是符合json格式要求的js字符串。例如:var jsonStr = "{StudentID:'100',Name:'tmac',Hometown:'usa'}";json對象:指符合json格式要求的js對象。例如:var jsonObj = { StudentID: "100", Name: "tmac", Hometown: "usa" };

三、在JS中如何使用JSON

JSON是JS的一個子集,所以可以在JS中輕松地讀,寫JSON。讀和寫JSON都有兩種方法,分別是利用”.”操作符和“[key]”的方式。我們首先定義一個JSON對象,代碼如下。

var obj = {            1: "value1",            "2": "value2",            count: 3,            person: [ //數(shù)組結(jié)構(gòu)JSON對象,可以嵌套使用                        {                            id: 1,                            name: "張三"                        },                        {                            id: 2,                            name: "李四"                        }                   ],            object: { //對象結(jié)構(gòu)JSON對象                id: 1,                msg: "對象里的對象"                }        };

1、從JSON中讀數(shù)據(jù)

function ReadJSON() {            alert(obj.1); //會報語法錯誤,可以用alert(obj["1"]);說明數(shù)字最好不要做關(guān)鍵字            alert(obj.2); //同上            alert(obj.person[0].name); //或者alert(obj.person[0]["name"])            alert(obj.object.msg); //或者alert(obj.object["msg"])        }

2、向JSON中寫數(shù)據(jù)

比如要往JSON中增加一條數(shù)據(jù),代碼如下:

function Add() {             //往JSON對象中增加了一條記錄            obj.sex= "男" //或者obj["sex"]="男"        }

增加數(shù)據(jù)后的JSON對象如圖:

3、修改JSON中的數(shù)據(jù)

我們現(xiàn)在要修改JSON中count的值,代碼如下:

function Update() {           obj.count = 10; //或obj["count"]=10       }

修改后的JSON如圖:

4、刪除JSON中的數(shù)據(jù)

我們現(xiàn)在實現(xiàn)從JSON中刪除count這條數(shù)據(jù),代碼如下:

function Delete() {                delete obj.count;//或obj["count"]}

刪除后的JSON如圖:

可以看到count已經(jīng)從JSON對象中被刪除了。

5、便利JSON對象

可以使用for…in…循環(huán)來遍歷JSON對象中的數(shù)據(jù),比如我們要遍歷輸出obj對象的值,代碼如下:

function Traversal() {            for (var c in obj) {                console.log(c + ":", obj[c]);            }}

程序輸出結(jié)果為:

四、在.NET中如何使用JSON

說到在.net中使用JSON,就不得不提到JSON.NET,它是一個非常著名的在.net中處理JSON的工具,我們最常用的是下面兩個功能。

1、通過序列化將.NET對象轉(zhuǎn)換為JSON字符串

在web開發(fā)過程中,我們經(jīng)常需要將從數(shù)據(jù)庫中查詢到的數(shù)據(jù)(一般為一個集合,列表或數(shù)組等)轉(zhuǎn)換為JSON格式字符串傳回客戶端,這就需要進(jìn)行序列化,這里用到的是JsonConvert對象的SerializeObject方法。

其語法格式為:JsonConvert.SerializeObject(object)

代碼中的”object”就是要序列化的.net對象,序列化后返回的是json字符串。

比如,現(xiàn)在我們有一個TStudent的學(xué)生表,表中的字段和已有數(shù)據(jù)如圖所示

從表中我們可以看到一共有五條數(shù)據(jù),現(xiàn)在我們要從數(shù)據(jù)庫中取出這些數(shù)據(jù),然后利用JSON.NET的JsonConvert對象序列化它們?yōu)閖son字符串,并顯示在頁面上。C#代碼如下

protected void Page_Load(object sender, EventArgs e)        {            using (L2SDBDataContext db = new L2SDBDataContext())            {                List<Student> studentList = new List<Student>();                var query = from s in db.TStudents                            select new {                                 StudentID=s.StudentID,                                Name=s.Name,                                Hometown=s.Hometown,                                Gender=s.Gender,                                Brithday=s.Birthday,                                ClassID=s.ClassID,                                Weight=s.Weight,                                Height=s.Height,                                Desc=s.Desc                            };                foreach (var item in query)                {                    Student student = new Student { StudentID=item.StudentID,Name=item.Name,Hometown=item.Hometown,Gender=item.Gender,Brithday=item.Brithday,ClassID=item.ClassID,Weight=item.Weight,Height=item.Height,Desc=item.Desc};                    studentList.Add(student);                }                lbMsg.InnerText = JsonConvert.SerializeObject(studentList);            }        }

輸出結(jié)果為:

從圖中我們可以看到,數(shù)據(jù)庫中的5條記錄全部取出來并轉(zhuǎn)化為json字符串了。

2,使用LINQ to JSON定制JSON數(shù)據(jù)

使用JsonConvert對象的SerializeObject只是簡單地將一個list或集合轉(zhuǎn)換為json字符串。但是,有的時候我們的前端框架比如ExtJs對服務(wù)端返回的數(shù)據(jù)格式是有一定要求的,比如下面的數(shù)據(jù)格式,這時就需要用到JSON.NETLINQ to JSON,LINQ to JSON的作用就是根據(jù)需要的格式來定制json數(shù)據(jù)。

比如經(jīng)常用在分頁的json格式如代碼:

{     "total": 5, //記錄總數(shù)    "rows":[        //json格式的數(shù)據(jù)列表    ]}

使用LINQ to JSON前,需要引用Newtonsoft.Jsondllusing Newtonsoft.Json.Linq的命名空間。LINQ to JSON主要使用到JObject, JArray, JProperty和JValue這四個對象,JObject用來生成一個JSON對象,簡單來說就是生成”{}”,JArray用來生成一個JSON數(shù)組,也就是”[]”,JProperty用來生成一個JSON數(shù)據(jù),格式為key/value的值,而JValue則直接生成一個JSON值。下面我們就用LINQ to JSON返回上面分頁格式的數(shù)據(jù)。代碼如下:

protected void Page_Load(object sender, EventArgs e)        {            using (L2SDBDataContext db = new L2SDBDataContext())            {                //從數(shù)據(jù)庫中取出數(shù)據(jù)并放到列表list中                List<Student> studentList = new List<Student>();                var query = from s in db.TStudents                            select new                            {                                StudentID = s.StudentID,                                Name = s.Name,                                Hometown = s.Hometown,                                Gender = s.Gender,                                Brithday = s.Birthday,                                ClassID = s.ClassID,                                Weight = s.Weight,                                Height = s.Height,                                Desc = s.Desc                            };                foreach (var item in query)                {                    Student student = new Student { StudentID = item.StudentID, Name = item.Name, Hometown = item.Hometown, Gender = item.Gender, Brithday = item.Brithday, ClassID = item.ClassID, Weight = item.Weight, Height = item.Height, Desc = item.Desc };                    studentList.Add(student);                }                //基于創(chuàng)建的list使用LINQ to JSON創(chuàng)建期望格式的JSON數(shù)據(jù)                lbMsg.InnerText = new JObject(                        new JProperty("total",studentList.Count),                        new JProperty("rows",                                new JArray(                                        //使用LINQ to JSON可直接在select語句中生成JSON數(shù)據(jù)對象,無須其它轉(zhuǎn)換過程                                        from p in studentList                                        select new JObject(                                                new JProperty("studentID",p.StudentID),                                                new JProperty("name",p.Name),                                                new JProperty("homeTown",p.Hometown)                                            )                                    )                            )                    ).ToString();            }        }

輸出結(jié)果為:

3、處理客戶端提交的客戶端數(shù)據(jù)

客戶端提交過來的數(shù)據(jù)一般都是json字符串,有了更好地進(jìn)行操作(面向?qū)ο蟮姆绞剑?,所以我們一般都會想辦法將json字符串轉(zhuǎn)換為json對象。例如客戶端提交了以下數(shù)組格式j(luò)son字符串。

[    {StudentID:"100",Name:"aaa",Hometown:"china"},    {StudentID:"101",Name:"bbb",Hometown:"us"},    {StudentID:"102",Name:"ccc",Hometown:"england"}]

在服務(wù)端就可以使用JObject或JArray的Parse方法輕松地將json字符串轉(zhuǎn)換為json對象,然后通過對象的方式提取數(shù)據(jù)。下面是服務(wù)端代碼。

protected void Page_Load(object sender, EventArgs e)        {            string inputJsonString = @"                [                    {StudentID:'100',Name:'aaa',Hometown:'china'},                    {StudentID:'101',Name:'bbb',Hometown:'us'},                    {StudentID:'102',Name:'ccc',Hometown:'england'}                ]";            JArray jsonObj = JArray.Parse(inputJsonString);            string message = @"<table border='1'>                    <tr><td width='80'>StudentID</td><td width='100'>Name</td><td width='100'>Hometown</td></tr>";            string tpl = "<tr><td>{0}</td><td>{1}</td><td>{2}</td></tr>";            foreach (JObject jObject in jsonObj)            {                message += String.Format(tpl, jObject["StudentID"], jObject["Name"],jObject["Hometown"]);            }            message += "</table>";            lbMsg.InnerHtml = message;        }

輸出結(jié)果為:

當(dāng)然,服務(wù)端除了使用LINQ to JSON來轉(zhuǎn)換json字符串外,也可以使用JsonConvertDeserializeObject方法。如下面代碼實現(xiàn)上面同樣的功能。

List<Student> studentList = JsonConvert.DeserializeObject<List<Student>>(inputJsonString);//注意這里必須為List<Student>類型,因為客戶端提交的是一個數(shù)組json            foreach (Student student in studentList)            {                message += String.Format(tpl, student.StudentID, student.Name,student.Hometown);            }

總結(jié):

在客戶端,讀寫json對象可以使用”.”操作符或”["key”]”,json字符串轉(zhuǎn)換為json對象使用eval()函數(shù)。在服務(wù)端,由.net對象轉(zhuǎn)換json字符串優(yōu)先使用JsonConvert對象的SerializeObject方法,定制輸出json字符串使用LINQ to JSON。由json字符串轉(zhuǎn)換為.net對象優(yōu)先使用JsonConvert對象的DeserializeObject方法,然后也可以使用LINQ to JSON。

到此,關(guān)于“有關(guān)JSON的詳細(xì)介紹”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注億速云網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI