JSON 解析的兩種方法

今天幫朋友看了下JSON解析結果·············

eval解析JSON中的注意點

在JS中將JSON的字符串解析成JSON數據格式,一般有兩種方式:

1.一種為使用eval()函數。

2. 使用Function對象來進行返回解析。

使用eval函數來解析,并且使用jquery的each方法來遍歷

用jquery解析JSON數據的方法,作為jquery異步請求的傳輸對象,jquery請求后返回的結果是json對象,這里考慮的都是服務器返回JSON形式的字符串的形式,對于利用JSONObject等插件封裝的JSON對象,與此亦是大同小異,這里不再做說明。?
這里首先給出JSON字符串集,字符串集如下:

代碼如下:
var data="?
{?
root:?
[?
{name:'1',value:'0'},?
{name:'6101',value:'北京市'},?
{name:'6102',value:'天津市'},?
{name:'6103',value:'上海市'},?
{name:'6104',value:'重慶市'},?
{name:'6105',value:'渭南市'},?
{name:'6106',value:'延安市'},?
{name:'6107',value:'漢中市'},?
{name:'6108',value:'榆林市'},?
{name:'6109',value:'安康市'},?
{name:'6110',value:'商洛市'}?
]
}";?
這里以jquery異步獲取的數據類型——json對象和字符串為依據,分別介紹兩種方式獲取到的結果處理方式。

1.對于服務器返回的JSON字符串,如果jquery異步請求沒做類型說明,或者以字符串方式接受,那么需要做一次對象化處理,方式不是太麻煩,就是將該字符串放于eval()中執行一次。這種方式也適合以普通javascipt方式獲取json對象,以下舉例說明:

var dataObj=eval("("+data+")");//轉換為json對象

為什么要 eval這里要添加 “("("+data+")");//”呢?

原因在于:eval本身的問題。 由于json是以”{}”的方式來開始以及結束的,在JS中,它會被當成一個語句塊來處理,所以必須強制性的將它轉換成一種表達式。

加上圓括號的目的是迫使eval函數在處理JavaScript代碼的時候強制將括號內的表達式(expression)轉化為對象,而不是作為語句(statement)來執行。舉一個例子,例如對象字面量{},如若不加外層的括號,那么eval會將大括號識別為JavaScript代碼塊的開始和結束標記,那么{}將會被認為是執行了一句空語句。所以下面兩個執行結果是不同的:
alert(eval("{}"); // return undefined
alert(eval("({})");// return object[Object]

對于這種寫法,在JS中,可以到處看到。

如: (function()) {}();? 做閉包操作時等。



alert(dataObj.root.length);//輸出root的子對象數量?
$.each(dataObj.root,fucntion(idx,item){?
if(idx==0){?
return true;?
}?
//輸出每個root子對象的名稱和值?
alert("name:"+item.name+",value:"+item.value);?
})?
注:對于一般的js生成json對象,只需要將$.each()方法替換為for語句即可,其他不變。


2.對于服務器返回的JSON字符串,如果jquery異步請求將type(一般為這個配置屬性)設為“json”,或者利用$.getJSON()方法獲得服務器返回,那么就不需要eval()方法了,因為這時候得到的結果已經是json對象了,只需直接調用該對象即可,這里以$.getJSON方法為例說明數據處理方法:?
$.getJSON("http://www.phpzixue.cn/",{param:"gaoyusi"},function(data){?
//此處返回的data已經是json對象?
//以下其他操作同第一種情況?
$.each(data.root,function(idx,item){?
if(idx==0){?
return true;//同countinue,返回false同break?
}?
alert("name:"+item.name+",value:"+item.value);?
});?
});?
這里特別需要注意的是方式1中的eval()方法是動態執行其中字符串(可能是js腳本)的,這樣很容易會造成系統的安全問題。所以可以采用一些規避了eval()的第三方客戶端腳本庫,比如JSON in JavaScript就提供了一個不超過3k的腳本庫。

第二種解析方式就是使用Function對象來完成,它的典型應用就是在JQUERY中的AJAX方法下的success等對于返回數據data的解析

var json='{"name":"CJ","age":18}';

data =(new Function("","return "+json))();

?

此時的data就是一個會解析成一個 json對象了.

最后是用第一種方法解決的。

轉載于:https://www.cnblogs.com/DataBase-123/p/6768659.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/283732.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/283732.shtml
英文地址,請注明出處:http://en.pswp.cn/news/283732.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

配置中心 App Configuration (三):配置的動態更新

Get Azure key-value pairs from App configuration | Serverless360寫在前面我在前文:《微軟Azure配置中心 App Configuration (一):輕松集成到Asp.Net Core》已經介紹了Asp.net Core怎么輕易的接入azure 配置中心App Configuration(下稱azure 配置中心…

萬字總結 JS 數據結構與常用的算法

前言 首先,為什么我會學習數據結構與算法呢,其實主要是有兩方面 第一,是我在今年的flag里明確說到我會學這個東西第二,學了這些,對自己以后在工作或者面試也會帶來許多好處然后,本文是最近學習的一個總結文…

精通Java設計模式從初見到相愛之工廠+策略模式(3)

為什么80%的碼農都做不了架構師?>>> 1、公司項目需求。 用戶簽到活動,會員簽到怎么處理,超級會員怎么處理,普通用戶簽到怎么處理,針對不同的檔次,有不同的方案,所以在項目中用到了策…

jquery weui 中alert彈出框在ios中跳動問題

問題描述: jquery-weui中的彈出框在ios上會有一個右下角向中間滑動的效果,在Android上沒有這個效果。 解決方法: 修該jquery-weui.js中的openModal方法如下圖: 轉載于:https://www.cnblogs.com/xianZJ/p/6773097.html

WPF效果第一百九十五篇之又玩ListBox

ListBox一直是我的最愛;今天再次基于他玩耍一下不一樣的效果;閑話不多扯直接看效果:1、這次直接用的ItemContainerStyle:2、通過HitTest實現點選邊框:Point point e.GetPosition(LightDarkListBox); VisualTreeHelper.HitTest(LightDarkListBox, new HitTestFilter…

Web3,互聯網新造神“機器”?

本文來自微信公眾號:每經頭條 (ID:nbdtoutiao),作者:李蕾,編輯:肖芮冬,頭圖來自:視覺中國 “與目前的互聯網相比,Web3基于區塊鏈等底層技術&#…

Gradle實戰:發布aar包到maven倉庫

查看原文:http://blog.csdn.net/u0108184... Gradle實戰系列文章:《Gradle基本知識點與常用配置》《Gradle實戰:Android多渠道打包方案匯總》《Gradle實戰:不同編譯類型的包同設備共存》《Gradle實戰:執行sql操作hive…

synchronized與Lock的區別

類別synchronizedLock存在層次Java的關鍵字,在jvm層面上是一個類鎖的釋放1、以獲取鎖的線程執行完同步代碼,釋放鎖 2、線程執行發生異常,jvm會讓線程釋放鎖在finally中必須釋放鎖,不然容易造成線程死鎖鎖的獲取假設A線程獲得鎖&am…

even兼容

var eventarguments.callee.caller.arguments[0]||window.event;//消除瀏覽器差異 var ewindow.event||event; //消除瀏覽器差異 轉載于:https://www.cnblogs.com/webqiand/articles/11250768.html

普通中年人的真實出路

閱讀本文大概需要6分鐘。互聯網人甚至中國整體的用工市場的確有中年淘汰的問題,我們可以當它不存在,甚至當有人給出解法的時候,我們也可以認為他們在傳播焦慮,但事實就是事實,它的存在不隨個人意愿而轉移。最近抖音上有…

項目管理常見的問題

綜合管理 缺乏企業級的項目管理平臺;項目目標不清楚;項目經理不了解項目管理流程和工具;項目模板不統一;計劃意識薄弱,缺乏規范的分解。難以過程監控,實時地了解項目進度,靠手工統計和匯報項目進度,難以真實反映進度。項目控制不力&#xff0…

常用小提示

阿里云Linux安裝軟件鏡像源 第一步:備份你的原鏡像文件,以免出錯后可以恢復。 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup第二步:下載新的CentOS-Base.repo 到/etc/yum.repos.d/ CentOS 5 wget -O /etc…

抽象工廠模式(Absraact Factory)介紹與實現

創建一個IProduct,后面模擬業務時要用到 package com.xiawei.factory; public class IProduct { private String productNo "";} package com.xiawei.factory;/** * 規范工廠接口 </p> *///創建一個所有工廠的規范接口,后面所有的工廠類都要來實現這個接口,并…

【溫故知新】C# Linq中 Select SelectMany 使用技巧

微信公眾號&#xff1a;趣編程ACE關注可了解更多的.NET日常實戰開發技巧&#xff0c;如需源碼 后臺回復 源碼 即可;如果覺得對你有幫助&#xff0c;歡迎關注C# Linq中 Select && SelectMany 使用技巧Select 和 SelectMany 是我們開發中對集合常用的兩個擴展方法&#x…

bzoj4870

http://www.lydsy.com/JudgeOnline/problem.php?id4870 矩陣快速冪。。。 人話題意&#xff1a;從nk個物品里選模k余r個物品&#xff0c;問方案數模P 那么我們有方程 f[i][j]f[i-1][j]f[i-1][j-1] 跟組合數一個樣子 j∈(0,k) 這個物品選還是不選加起來 構造矩陣&#xff1a;x.…

15000 字的 SQL 語句大全,值得收藏!

基礎 1、說明&#xff1a;創建數據庫 CREATE DATABASE database-name 2、說明&#xff1a;刪除數據庫 drop database dbname 3、說明&#xff1a;備份sql server --- 創建 備份數據的 device USE master EXEC sp_addumpdevice disk, testBack, c:\mssql7backup\MyNwind_1.dat -…

Codeforces Round #410 (Div. 2) D. Mike and distribution 思維+數學

鏈接&#xff1a; http://codeforces.com/contest/798/problem/D 題意&#xff1a; 給你兩個長度為n的數列a和b&#xff0c;讓你選n/21個下標&#xff0c;使得2*∑ai>suma,2*∑bi>sumb 題解1&#xff1a; 用一個叫random_shuffle的東西&#xff0c;每次都亂選&#xff0c…

PerfView專題 (第三篇):如何尋找 C# 中的 VirtualAlloc 內存泄漏

一&#xff1a;背景 上一篇我們聊到了如何用 PerfView 去偵察 NTHeap 的內存泄漏&#xff0c;這種內存泄漏往往是用 C 的 malloc 或者 C 的 new 分配而不釋放所造成的&#xff0c;這一篇我們來聊一下由 VirtualAlloc 方法造成的泄漏如何去甄別&#xff1f;了解 VirtualAlloc 的…

[APP]- 找回Xcode7的代碼折疊功能

為什么80%的碼農都做不了架構師&#xff1f;>>> 原 找回Xcode7的代碼折疊功能 升級到Xcode7后&#xff0c;會發現代碼折疊功能不見了&#xff0c;這是怎么回事&#xff1f; 其實這個功能還在的&#xff0c;只是蘋果默認把這個功能禁掉了&#xff1a;在Xcode菜單里選…

有哪些值得推薦的.NET ORM框架?

前言&#xff1a; 最近有很多同學問我.NET方面有哪些好用的ORM框架&#xff0c;我覺得這方面的介紹網上應該會介紹的比較全面文章&#xff0c;于是我想搜一篇全面的介紹文章發給他們結果我發現網上說來說去基本上就是那幾個&#xff0c;于是就有了這篇文章。 什么是ORM? ORM 是…