詳解JavaScript中js對(duì)象與JSON格式字符串的相互轉(zhuǎn)換
首先我們來(lái)看一下js中JSON格式的字符串
var JSONStr1 = "{\"name\" : \"張三\"}";
注意以下的寫(xiě)法不是js中JSON格式的字符串,它只是一個(gè)js的字符串。
var JSONStr2 = "{'name' : '張三'}";
我們看JSON語(yǔ)法中對(duì)于字符串的定義:是由雙引號(hào)包圍的任意數(shù)量Unicode字符的集合,使用反斜線轉(zhuǎn)義。一個(gè)字符(character)即一個(gè)單獨(dú)的字符串(character string)。
下面我們來(lái)看一下在js中怎么把JSON格式的字符串轉(zhuǎn)換成一個(gè)JS對(duì)象。(
var jsObj3 = eval("(" + JSONStr1 + ")"); var jsObj4 = JSON.parse(JSONStr1);
推薦使用第二種方式具體原因請(qǐng)參看:http://www.json.org.cn/resource/json-in-javascript.htm
此外提一句使用這兩種方式轉(zhuǎn)換后的js對(duì)象,應(yīng)該是“一個(gè)符合JSON數(shù)據(jù)格式的js對(duì)象”,也就是說(shuō)它的屬性是帶著引號(hào)的,這只是我的一種猜測(cè),因?yàn)槿绻鸍SON格式的字符串如下表示:
var JSONStr1 = "{\"f[name]\" : \"張三\"}";
那么轉(zhuǎn)換后的JS對(duì)象的屬性必定要加上引號(hào),因?yàn)閖s對(duì)象的屬性不加引號(hào)只能使用字母,數(shù)字,下劃線和$符號(hào)表示,使用其它符號(hào)屬性就要加上引號(hào)了,所以說(shuō)JS對(duì)象字面量表示法中屬性加上引號(hào)是不會(huì)錯(cuò)的。另外如果JSON格式的字符串如上所示,那么轉(zhuǎn)換后的js對(duì)象對(duì)f[name]取值就不能使用 jsObj4.f[name] 要用 jsObj4['f[name]'] ,因?yàn)橛刑厥庾址?,這點(diǎn)要注意了。對(duì)于我的猜測(cè),讀者要有異議,可以提給我。
我們?cè)賮?lái)看看在js中js對(duì)象與JSON格式字符串的轉(zhuǎn)換。下面我準(zhǔn)備了幾組js對(duì)象加以說(shuō)明:
<input type="button" value="測(cè)試按鈕1" onclick="testJson();"/> <script type="text/javascript"> //(1) 這是一個(gè)js對(duì)象 var jsObj1 = { name : "張三" } //(2)這是一個(gè)內(nèi)部帶有方法js對(duì)象。 var jsObj2 = { name : "張三", func : function(){ alert("hello"); } } //(3)這是一個(gè)符合JSON數(shù)據(jù)格式的js對(duì)象 var jsonObj = { "name" : "張三", "age" : 10, "remark" : {"high" :170,"address" : "beijingshi"} } // js數(shù)組對(duì)象 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); }
看一下彈框的內(nèi)容:
(1) (2)
(3) ?。?)
其中 (1)、(3)、(4)的執(zhí)行結(jié)果說(shuō)明,JSON解析器的stringify()函數(shù)對(duì)于js對(duì)象是fou符合JSON格式是不加限定,都可以把js對(duì)象轉(zhuǎn)換成JSON格式字符串。
(2)的執(zhí)行結(jié)果說(shuō)明,js對(duì)象中如果沒(méi)有JSON表示的值(比如函數(shù)和undefined)將會(huì)被排除。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Jackson中json格式的字符串與對(duì)象的互相轉(zhuǎn)換方式
- 把JSON數(shù)據(jù)格式轉(zhuǎn)換為Python的類對(duì)象方法詳解(兩種方法)
- FastJson對(duì)于JSON格式字符串、JSON對(duì)象及JavaBean之間的相互轉(zhuǎn)換操作
- 把json格式的字符串轉(zhuǎn)換成javascript對(duì)象或數(shù)組的方法總結(jié)
- 將List對(duì)象列表轉(zhuǎn)換成JSON格式的類實(shí)現(xiàn)方法
- 把普通對(duì)象轉(zhuǎn)換成json格式的對(duì)象的簡(jiǎn)單實(shí)例
- GSON實(shí)現(xiàn)Java對(duì)象與JSON格式對(duì)象相互轉(zhuǎn)換的完全教程
- JS對(duì)象與JSON格式數(shù)據(jù)相互轉(zhuǎn)換
- JavaScript對(duì)象與JSON格式的轉(zhuǎn)換及JSON.stringify和JSON.parse的使用方法
相關(guān)文章
ES6的Fetch異步請(qǐng)求的實(shí)現(xiàn)方法
這篇文章主要介紹了ES6的Fetch異步請(qǐng)求的實(shí)現(xiàn)方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-12-12JavaScript如何借用構(gòu)造函數(shù)繼承
這篇文章主要介紹了JavaScript如何借用構(gòu)造函數(shù)繼承,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-11-11詳解小程序設(shè)置緩存并且不覆蓋原有數(shù)據(jù)
這篇文章主要介紹了小程序設(shè)置緩存并且不覆蓋原有數(shù)據(jù),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04JavaScript兩種axios取消請(qǐng)求方式小結(jié)
本文主要介紹了JavaScript兩種axios取消請(qǐng)求方式小結(jié),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-03-03JS簡(jiǎn)單實(shí)現(xiàn)父子窗口傳值功能示例【未使用iframe框架】
這篇文章主要介紹了JS簡(jiǎn)單實(shí)現(xiàn)父子窗口傳值功能,結(jié)合具體實(shí)例形式分析了javascript實(shí)現(xiàn)不使用iframe框架進(jìn)行窗口之間簡(jiǎn)單傳值的相關(guān)操作技巧,需要的朋友可以參考下2017-09-09JavaScript實(shí)現(xiàn)異步獲取表單數(shù)據(jù)
這篇文章主要為大家詳細(xì)介紹了JavaScript實(shí)現(xiàn)異步獲取表單數(shù)據(jù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-05-05