前端js把json字符串轉json對象 java對象轉json對象命令


前端js把json字符串轉json對象 java對象轉json對象命令

文章插圖
最近在逛編程問題解答的時候,看到這樣的提問:如何將一個JSON數組類型的字符串轉換為JSON數組,然后遍歷數組取出JSON對象,最后在JS中取出里面的屬性 。在這里給同樣有疑問的朋友做下解答 , 
首先我們追本溯源問一下,JSON究竟是什么東西?為什么JSON就是易于數據交換?本文將從以下幾個方面去理解JSON:
首先是對“JSON是一種輕量的數據交換格式”的理解;
然后來看經常被混為一談的JSON和JS對象的區別;
json字符串轉換成json數組并遍歷屬性值;
什么是JSON?JSON是一種輕量級的數據交換格式 。
如果沒有去過JSON的官方介紹可以去一下這里 , 官方介紹已經很清楚地表述了JSON是什么 , 我將JSON是什么提煉成以下幾個方面:
1. 一種數據格式
什么是格式?就是規范你的數據要怎么表示 , 舉個栗子,有個人叫“二百六”,身高“160cm”,體重“60kg” , 現在你要將這個人的這些信息傳給別人或者別的什么東西,你有很多種選擇:
【前端js把json字符串轉json對象 java對象轉json對象命令】以上所有選擇,傳遞的數據是一樣的,但是你可以看到形式是可以各式各樣的,這就是各種不同格式化后的數據,JSON是其中一種表示方式 。
2. 基于文本的數據格式
JSON是基于文本的數據格式,相對于基于二進制的數據,所以JSON在傳遞的時候是傳遞符合JSON這種格式(至于JSON的格式是什么我們第二部分再說)的字符串,我們常會稱為“JSON字符串” 。
3. 輕量級的數據格式
在JSON之前 , 有一個數據格式叫xml,現在還是廣泛在用,但是JSON更加輕量,如xml需要用到很多標簽,像上面的例子中,你可以明顯看到xml格式的數據中標簽本身占據了很多空間,而JSON比較輕量,即相同數據,以JSON的格式占據的帶寬更?。?這在有大量數據請求和傳遞的情況下是有明顯優勢的 。
4. 被廣泛地用于數據交換
輕量已經是一個用于數據交換的優勢了 , 但更重要的JSON是易于閱讀、編寫和機器解析的,即這個JSON對人和機器都是友好的,而且又輕,獨立于語言(因為是基于文本的),所以JSON被廣泛用于數據交換 。
以前端JS進行ajax的POST請求為例 , 后端PHP處理請求為例:
可以看到,相同的數據在這里有3種不同的表現形式,分別是前端的JS對象、傳輸的JSON字符串、后端的PHP對象,JS對象和PHP對象明顯不是一個東西,但是由于大家用的都是JSON來傳遞數據 , 大家都能理解這種數據格式,都能把JSON這種數據格式很容易地轉化為自己能理解的數據結構,這就方便啦,在其他各種語言環境中交換數據都是如此 。
經常被混為一談的JSON和JS對象很多時候都聽到“JSON是JS的一個子集”這句話,而且這句話我曾經也一直這么認為 , 每個符合JSON格式的字符串你解析成js都是可以的,直到后來發現了一個奇奇怪怪的東西…
1. 兩個本質不同的東西為什么那么密切
JSON和JS對象本質上完全不是同一個東西,就像“斑馬線”和“斑馬”,“斑馬線”基于“斑馬”身上的條紋來呈現和命名,但是斑馬是活的,斑馬線是非生物 。
同樣,”JSON”全名”JavaScript Object Notation”,所以它的格式(語法)是基于JS的,但它就是一種格式,而JS對象是一個實例,是存在于內存的一個東西 。
說句玩笑話,如果JSON是基于PHP的 , 可能就叫PON了,形式可能就是這樣的了[‘propertyOne’ => ‘foo’, ‘propertyTwo’ => 42,] , 如果這樣 , 那么JSON可能現在是和PHP比較密切了 。
此外,JSON是可以傳輸的 , 因為它是文本格式,但是JS對象是沒辦法傳輸的,在語法上,JSON也會更加嚴格 , 但是JS對象就很松了 。
那么兩個不同的東西為什么那么密切,因為JSON畢竟是從JS中演變出來的,語法相近 。
2. JSON格式別JS對象語法表現上嚴格在哪
先就以“鍵值對為表現的對象”形式上 , 對比下兩者的不同,至于JSON還能以怎樣的形式表現,對比完后再羅列 。
可以看到,相對于JS對象,JSON的格式更嚴格 , 所以大部分寫的JS對象是不符合JSON的格式的 。
json字符串轉換成json數組并遍歷屬性值方式一:使用Iterator迭代器遍歷取值
方法二:使用for循環