JSON解析

如下爲網絡上搜集的關於JSON的資料,整合爲隨筆記錄,供之後回顧。javascript

百度:https://baike.baidu.com/item/JSON/2462549?fr=aladdinhtml

--------------------java

一. 數據格式
  1.數組方式:
        [
            {"key1": "value1"},
            {"key2": "value2"}
        ]
  2. 對象方式:
     {
          「key1: "value1",
           "key2": "value2",
           "key3": [
                {"key31": "value31"},
                {"key32": "value32"}
            ]
      }
二.json方法
    1. JSON.stringify( {} , [ ] , ""),把數據序列化爲json字符串
        參數一 :要序列化的數據(object)
       參數二 :控制對象的鍵值,只想輸出指定的屬性,傳入一個數組
       參數三 :序列化後,打印輸出的格式(一個Tab ,能夠更直觀查看json)
   2.JSON.parse(json字符串); 把json數據反序列化爲一個js對象。編程


原文:https://blog.csdn.net/weixin_41804429/article/details/81036008 json

--------------------數組

之前老師說了一句Java格式的json轉換成js格式的json,我從那一直開始糾結,json既然是數據交換語言,格式都同樣怎麼還有語言之分的?糾結至今,發現,仍是以前的學習資料有缺陷,沒有詳細講解json,花了一個晚上和一個上午的時間整理了一些有關json的資料:

JSON  結構有兩種結構
json簡單說就是javascript中的對象和數組,因此這兩種結構就是對象和數組兩種結構,經過這兩種結構能夠表示各類複雜的結構。
一、對象:對象在js中表示爲「{}」括起來的內容,數據結構爲 {key:value,key:value,...}的鍵值對的結構,在面向對象的語言中,key爲對象的屬性,value爲對應的屬性值,因此很容易理解,取值方法爲 對象.key 獲取屬性值,這個屬性值的類型能夠是 數字、字符串、數組、對象幾種。
二、數組:數組在js中是中括號「[]」括起來的內容,數據結構爲 ["java","javascript","vb",...],取值方式和全部語言中同樣,使用索引獲取,字段值的類型能夠是 數字、字符串、數組、對象幾種。
通過對象、數組2種結構就能夠組合成複雜的數據結構了。
 爲了方便地處理JSON數據,JSON提供了json.js包,下載地址:http://www.json.org/json.js
    在數據傳輸流程中,json是以文本,即字符串的形式傳遞的,而JS操做的是JSON對象,因此,JSON對象和JSON字符串之間的相互轉換是關鍵。例如:

    JSON字符串:
    var str1 = '{ "name": "cxh", "sex": "man" }';
    JSON對象:
    var str2 = { "name": "cxh", "sex": "man" };
    1、JSON字符串轉換爲JSON對象
    要運用上面的str1,必須運用下面的要領先轉化爲JSON對象:
    //由JSON字符串轉換爲JSON對象
    var obj = eval('(' + str + ')');
    或者
    var obj = str.parseJSON(); //由JSON字符串轉換爲JSON對象
    或者
    var obj = JSON.parse(str); //由JSON字符串轉換爲JSON對象
    而後,就能夠這樣讀取:
    Alert(obj.name);
    Alert(obj.sex);
    特別留心:若是str原本就是一個JSON對象,那麼運用 eval()函數轉換後(哪怕是屢次轉換)仍是JSON對象,可是運用 parseJSON()函數處理後會有疑問(拋出語法異常)。
    2、能夠運用 toJSONString()或者全局要領 JSON.stringify()將JSON對象轉化爲JSON字符串。
    例如:
    var last=obj.toJSONString(); //將JSON對象轉化爲JSON字符
    或者
    var last=JSON.stringify(obj); //將JSON對象轉化爲JSON字符
    alert(last);
    留心:
    上面的多個要領中,除了eval()函數是js自帶的以外,其餘的多個要領都來自json.js包。新版本的 JSON 修改了 API,將 JSON.stringify() 和 JSON.parse() 兩個要領都注入到了 Javascript 的內建對象裏面,前者變成了 Object.toJSONString(),然後者變成了 String.parseJSON()。若是提示找不到toJSONString()和parseJSON()要領,則說明您的json包版本過低。
至於老師說的eval函數將Java格式的json轉換成js格式的json,我想更準確地來講,應該是字符串形式的json被看成一堆js代碼解析。確實是被誤導了一些。。最關鍵的是,老師用的是
/*這一段我本身看就行
JSONArray jSONArray = JSONArray.fromObject(city);
String jsonJAVA = jSONArray.toString();
而後又用了
JSONObject jso = new JSONObject();
jso.put("msg", "success");
jso.accumulate("userList", userList);
把我整懵逼了
*/
如下的理解我以爲很好,
1.JS是一種腳本語言,所謂的對象,其實還只是處在源碼階段,當這段符合語法的文本被腳本引擎解釋以後,在內存中才會產生對象,至因而否符合語法,取決於腳本引擎。
2.JSON不是一種語言,它僅僅是一種數據的表達方式,從某種程度上來說,JSON跟XML沒有什麼區別。
之因此LZ會有這樣的疑慮,緣由在於對數據的理解存在誤差,對於JS的字面量來講,這段文本僅僅是代碼的一部分,至關於指令,而JSON文本,其自己就表示了數據。兩者相同的地方是,看起來都是數據,並且恰巧又都是文本;不一樣的地方在於,JS字面量的文本是被腳本引擎直接解析的,而JSON的文本,若是要轉化爲JS對象的話,是交給eval函數來處理的,那麼,如何理解JSON的文本,就取決於這個函數,而不是腳本引擎,由於這2者的處理根本就不在一個層面上。
另外,JS必須交給JS腳本引擎處理,而JSON的字符串,任何程序都能處理,至於引號的問題,取決於JSON解析器的容忍程度,若是你願意,也可按照本身的意願寫一個解析器,可以容忍包括不寫引號,或者單/雙引號,甚至其餘任何符號做爲邊界符。網絡


原文:https://blog.csdn.net/qq_32528231/article/details/52783210 數據結構

--------------------編程語言

JSON與JavaScript的關係函數

JSON是一種輕量級的數據交換格式,全稱——JavaScript 對象表示法(JavaScript Object Notation)。

  類比XML,你能夠把JSON看做是一種存儲數據的格式類型,一種數據規範。

  描述JSON格式數據的語法採用了JS對象字面量的表示方法,可是你不能的把JS對象就看作是JSON了,同XML同樣JSON只是一種存儲數據的類型,它是獨立於語言存在的,只是在不一樣的編程語言中對這種數據類型的實現不一樣,例如在JavaScript中使用JavaScript對象對這種數據格式進行實現,那麼在java中固然是用java對象實現。

  同時,既然JSON這種數據格式用JS對象字面量的表示方法進行描述,那麼描述JSON的語法就是JS對象字面量表示法語法的一個子集。以下圖所示:

 

                    

 

  下面咱們看一下js對象的字面量表示法,及JSON格式的數據是怎麼用這種語法實現的。 

複製代碼
<script type="text/javascript">
    //這是一個js對象,屬性不加"",符合js對象的字面量表示法語法但不符合JSON語法。 var jsObj1 = { name : "張三" }
    //這是一個內部帶有方法js對象,雖然屬性加了"",但JSON的語法中屬性的值不能是方法。 var jsObj2 = { "name" : "張三", "func" : function(){ alert("hello"); } }
    //這是一個符合JSON數據格式的js對象,是JavaScript語言中對JSON這種數據格式的實現形式,也是咱們常說的"JSON對象"。
    //這種JS對象字面量的表示方法,也就是"JSON對於其數據形式規範的語法",因此說"JSON的語法就是JS對象字面量表示法語法的一個子集"。 var jsonObj = { "name" : "張三", "age" : 10,
       "remark" :{ "high" : 170 ,"address" : "beijinghaidian" }
        }

</script>
複製代碼

  其實對於"js對象的字面量表示法"中屬性加不加引號是"js對象"仍是"JSON對象的說法自己就是錯誤的,加與不加引號它都是"js對象",只是你加了引號之後,從語法上來講符合JSON的語法規則,而JSON的語法規則又是"js對象的字面量表示法"語法規則的子集,因此不管怎麼表示,他都是一個"js對象"。那麼有沒有屬性必需要加引號的狀況呢?咱們知道js對於變量的命名規則是數字、字母、下劃線及$符號,屬性不加引號時也符合這個規則,但要是屬性中有這四種以外其它的符號如"[" 或者 "."等等,屬性就必須引號來表示。

  說到底,JSON是一種數據格式,一種對於數據的規範,由於其居有自我描述性及簡潔的語法規則,讓它成爲了一種在不一樣語言之間理想的數據交換的格式,JSON獨立於語言而存在,任何站在語言的角度及對象層面對他的解釋都是有侷限性或者是錯誤的。

  參考文章:

    (1):http://www.json.org.cn/index.htm

    (2):http://www.w3school.com.cn/json/json_syntax.asp

原文:https://www.cnblogs.com/cdf-opensource-007/p/6380472.html

相關文章
相關標籤/搜索