JSON(二)——JavaScript中js對象與JSON格式字符串的相互轉換


首先我們來看一下js中JSON格式的字符串

var JSONStr1 = "{\"name\" : \"張三\"}";

注意以下的寫法不是js中JSON格式的字符串,它只是一個js的字符串。

var JSONStr2 = "{'name' : '張三'}";

我們看JSON語法中對於字符串的定義是由雙引號包圍的任意數量Unicode字符的集合,使用反斜線轉義。一個字符(character)即一個單獨的字符串(character string)。

下面我們來看一下在js中怎么把JSON格式的字符串轉換成一個JS對象。(

var jsObj3 = eval("(" + JSONStr1 + ")");
var jsObj4 = JSON.parse(JSONStr1);

推薦使用第二種方式具體原因請參看http://www.json.org.cn/resource/json-in-javascript.htm

  此外提一句使用這兩種方式轉換后的js對象,應該是“一個符合JSON數據格式的js對象”,也就是說它的屬性是帶着引號的,這只是我的一種猜測,因為如果JSON格式的字符串如下表示:

var JSONStr1 = "{\"f[name]\" : \"張三\"}";

  那么轉換后的JS對象的屬性必定要加上引號,因為js對象的屬性不加引號只能使用字母,數字,下划線和$符號表示,使用其它符號屬性就要加上引號了,所以說JS對象字面量表示法中屬性加上引號是不會錯的。另外如果JSON格式的字符串如上所示,那么轉換后的js對象對f[name]取值就不能使用 jsObj4.f[name] 要用 jsObj4['f[name]'] ,因為有特殊字符,這點要注意了。對於我的猜測,讀者要有異議,可以提給我。

我們再來看看在js中js對象與JSON格式字符串的轉換。下面我准備了幾組js對象加以說明:

<input type="button" value="測試按鈕1" onclick="testJson();"/>
<script type="text/javascript">
    //(1) 這是一個js對象
    var jsObj1 = {
        name : "張三"
    }
    //(2)這是一個內部帶有方法js對象。
    var jsObj2 = {
        name : "張三",
        func : function(){
            alert("hello");
        }
    }
    //(3)這是一個符合JSON數據格式的js對象
    var jsonObj = {
        "name" : "張三",
        "age" : 10,
        "remark" : {"high" :170,"address" : "beijingshi"}
    }
    // js數組對象
    var jsArray = [
        {name : "張三"},
        {"age" : 10}
    ]

    function testJson(){

        var JSONstr1 = JSON.stringify(jsObj1);
        var JSONstr2 = JSON.stringify(jsObj2);
        var JSONstr3 = JSON.stringify(jsonObj);
        var JSONstr4 = JSON.stringify(jsArray);
        alert(JSONstr1);
        alert(JSONstr2);
        alert(JSONstr3);
        alert(JSONstr4);

    }

看一下彈框的內容:

(1)                (2)                                       (3)                       (4)

                    

 

其中 (1)、(3)、(4)的執行結果說明,JSON解析器的stringify()函數對於js對象是fou符合JSON格式是不加限定,都可以把js對象轉換成JSON格式字符串。

(2)的執行結果說明,js對象中如果沒有JSON表示的值(比如函數和undefined)將會被排除。

 

參考文章:

    http://www.json.org.cn/resource/json-in-javascript.htm

 

  最后說一點,我們作為程序員,研究問題還是要仔細深入一點的。當你對原理了解的有夠透徹,開發起來也就得心應手了,很多開發中的問題和疑惑也就迎刃而解了,而且在面對其他問題的時候也可做到觸類旁通。當然在開發中沒有太多的時間讓你去研究原理,開發中要以實現功能為前提,可等項目上線的后,你有大把的時間或者空余的時間,你大可去刨根問底,深入的去研究一項技術,為覺得這對一名程序員的成長是很重要的事情。

  

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM