从服务器传来的json,为什么要用js eval json数组()转,难道js不能解析原生的json吗?

& & ECMA-262(E3)中没有将JSON概念写到标准中,还好在ECMA-262(E5)中JSON的概念被正式引入了,包括全局的JSON对象和Date的toJSON方法。& & 1,eval方式解析,恐怕这是最早的解析方式了。如下:& & 复制代码代码如下:& & function strToJson(str){& & var json = eval('(' + str + ')');& && & }& & 记得别忘了str两旁的小括号。& & 2,new Function形式,比较怪异哦。如下& & 复制代码代码如下:& & function strToJson(str){& & var json = (new Function("return " + str))();& && & }& & 3,使用全局的JSON对象,如下:& & 复制代码代码如下:& & function strToJson(str){& & return JSON.parse(str);& & }& & 目前 IE8(S)/Firefox3.5+/Chrome4/Safari4/Opera10 已实现了该方法,以下是部分资料:/ie/archive//native-json-in-ie8.aspx https://developer.mozilla.org/en/Using_JSON_in_Firefox& & 使用JSON.parse需严格遵守JSON规范,如属性都需用引号引起来,如下& & 复制代码代码如下:& & var str = '{name:"jack"}';& & var bj = JSON.parse(str); // --> parse error& & name没有用引号引起来,使用JSON.parse所有浏览器中均抛异常,解析失败。而前两种方式则没问题。& & 另见:Chrome中JSON.parse的特殊实现& & 您可能感兴趣的文章:js 将json字符串转换为json对象的方法解析js字符串转成JSONjson数据与字符串的相互转化示例jQuery怎么解析Json字符串(Json格式/Json对象)Json对象与Json字符串互转(4种转换方式)JS JSON对象转为字符串的简单实现方法& & QQ空间
百度搜藏更多& & Tags:字符串 json& & 复制链接收藏本文打印本文关闭本文返回首页& & 上一篇:父子窗体间传递JSON格式的数据的代码& & 下一篇:教你如何使用PHP输出中文JSON字符串& & 相关文章js解析与序列化json数据(二)序列化探讨json-lib出现There is a cycle in the hierarchy解决办法Javascript. Jquery 遍历Json的实现代码json简单介绍JSON扫盲帖 JSON.as类教程Ajax+Json 级联菜单实现代码用nodejs写的一个简单项目打包工具比较详细的关于javascript. 解析json的代码json 介绍 js简单实例Json对象与Json字符串互转(4种转换方式)& & 文章评论& & 最 近 更 新& & js解析与序列化json数据(一)json.stringiIE8 原生JSON支持web页面数据展示新想法(json)javascript表单域与json数据间的交互教你如何使用PHP输出中文JSON字符串json跟xml的对比分析看了就知道什么是JSONJquery+asp.net后台数据传到前台js进行解Javascript. 通过json自动生成Dom的代码打印json对象的内容及JSON.stringify函数& & 热 点 排 行& & JS对象与JSON格式数据相互转换js中将字符串转换成json的三种方JSON.stringify 语法实例讲解jQuery 遍历json数组的实现代码json 实例详细说明教程json-lib出现There is a cycle ijavascript. 循环读取JSON数据的代Json对象与Json字符串互转(4种转比较详细的关于javascript. 解析jJavaScript. 创建对象
声明:该文章系网友上传分享,此内容仅代表网友个人经验或观点,不代表本网站立场和观点;若未进行原创声明,则表明该文章系转载自互联网;若该文章内容涉嫌侵权,请及时向
上一篇:下一篇:
相关经验教程
的原创经验被浏览,获得 ¥0.002 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.001 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.001 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.001 收益
的原创经验被浏览,获得 ¥0.002 收益
的原创经验被浏览,获得 ¥0.001 收益
的原创经验被浏览,获得 ¥0.001 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.001 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.001 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.001 收益
的原创经验被浏览,获得 ¥0.001 收益
的原创经验被浏览,获得 ¥0.001 收益
的原创经验被浏览,获得 ¥0.005 收益javascript中字符串格式json如何转化成json对象 - Roger Federer - ITeye技术网站
博客分类:
什么是JSON
JSON(JavaScript Object Notation)是一种优美的JavaScript对象创建方法。JSON也是一种轻量级数据交换格式。JSON非常易于人阅读与编写,同时利于机器解析与生成。JSON是在AJAX中代替XML交换数据的更佳方案。
JSON格式与语法
var jsonobject=
{
&&&&&&& //对象内的属性语法(属性名与属性值是成对出现的)
&&&&&&& propertyname:value,
&&&&&&& //对象内的函数语法(函数名与函数内容是成对出现的)
&&&&&&& functionname:function(){...;}
};
jsonobject -- JSON对象名称
propertyname -- 属性名称
functionname -- 函数名称
一对大括号,括起多个"名称/值"的集合
JSON使用"名称/值"对的集合表示,也可以被理解为数组(Array)
属性名或函数名可以是任意字符串,甚至是空字符串(见下面示例)
逗号用于隔开每对"名称/值"对
字符串格式json转化成json对象有3种方式:
1:js下用eval生成JSON对象& ---通过eval() 函数可以将JSON字符串转化为对象。
2:使用函数方式
3:使用js的json库或者jQuery提供的js库& --- 如果基于安全的考虑的话,最好是使用一个 JSON 解析器。 一个 JSON 解析器将只接受 JSON 文本。所以是更安全的。
&!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"&
&html xmlns="http://www.w3.org/1999/xhtml"&
&meta http-equiv="Content-Type" content="text/ charset=utf-8" /&
&title&字符串格式json如何转化成json对象&/title&
&style type="text/css"&&/style&
&script type="text/javascript"&
//方法1:js下用eval生成JSON对象
function strJsonToJsonByEval(jsonData){
var json = eval("(" + jsonData +")");//转换为json对象
//方法2:使用函数方式
function strJsonToJsonByFunction(jsonData){
  return ( new Function("return "+jsonData) )();
window.onload = function() {
var jsonData = " {name1:'1',value1:'a',name2:'2',value2:'b' }";
var json1 = strJsonToJsonByFunction(jsonData);
alert("Function || " + json1.name1 + "
" + json1.name2);
var json2 = eval("(
{name1:'1',value1:'a',name2:'2',value2:'b' } )");
alert("eval(\"(\"jsonData\")\")
|| " + json2.value1 + "
" + json2.value2);
var json3 = strJsonToJsonByEval(jsonData);
alert("Eval || " + json3.value1 + "
" + json3.value2);
写成一个方法:
* @method 将拼接好字符串格式的json 转成json对象
* @param jsonData param fomart:
* var jsonData = "{name1:'1',value1:'a',name2:'2',value2:'b' }";
function strJsonToJson(jsonData){
//方法1:js下用eval生成JSON对象
//var json = eval("(" + jsonData +")");//转换为json对象
//方法2:使用函数方式
  return ( new Function("return "+jsonData) )();
===========================================================================
&!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&
&html xmlns="http://www.w3.org/1999/xhtml"&
&meta http-equiv="Content-Type" content="text/ charset=utf-8" /&
&title&jQuery插件方式解析json&/title&
&script type="text/javascript" src="jquery-1.9.1.js"&&/script&
&script type="text/javascript" src="jquery.json-2.4.js"&&/script&
&script type="text/javascript"&
jquery-1.9.1.js 提供的方法。
jQuery.parseJSON( json ) 返回: Object
接受一个标准格式的 JSON 字符串,并返回解析后的 JavaScript 对象。
传入格式有误的 JSON 字符串可能导致抛出异常。例如,下面这些 JSON 字符串格式都不对:
{test: 1} (test 没有使用双引号包裹).
{'test': 1} ('test' 用了单引号而不是双引号包裹).
另外,如果你什么都不传入,或者传入空字符串、null、undefined 等,parseJSON 都会返回 null 。如果浏览器原生实现了 JSON.parse, jQuery 则会使用它来解析字符串。
var strJson = '{"name":"John"}';
//var strJson = "{name:'John'}";//错误格式,必须严格满足一个标准格式的 JSON 字符串,key--value 都用双引号包裹
var obj = jQuery.parseJSON(strJson);
alert( obj.name === "John" ); // true
var obj2 = $.parseJSON(strJson);
alert( obj2.name
jquery.json-2.4.js 提供的方法。
下面的方法在接受一个标准格式的 JSON 字符串 并不是很严格,只要是键值对形式的都可以。
/p/jquery-json/
toJSON: Serializes a javascript object, number, string, or array into JSON.
evalJSON: Converts from JSON to Javascript, quickly, and is trivial.
//Json Object
var json = { plugin: 'jquery-json', version: 2.4 };
//toJSON: Json Object ---& String Json
var encoded = $.toJSON( json );// '{"plugin":"jquery-json","version":2.4}'
//evalJSON: String Json ---& Json Object
var jsonObject = $.evalJSON( encoded );
var name = $.evalJSON( encoded ).// "jquery-json"
var version = $.evalJSON(encoded).// 2.4
alert( "toJSON: "
+ encoded + " ,typeof "
+ typeof encoded + "\r\n\r\n"
+ "evalJSON: "
+ jsonObject + " ,typeof "
+ typeof(jsonObject) + "\r\n\r\n"
+ "name= " + name + " , version= " + version );
浏览: 125492 次
来自: 北京
java 中 split 是正则表达式
面试前端javascript
你面试前台UI?
rambolovepanda 写道代码在 严格模式下
代码在 严格模式下
callee不管用的在JS环境下的JSON的认识和使用以及JS如何解析JSON - 推酷
在JS环境下的JSON的认识和使用以及JS如何解析JSON
首先明确JSON的含义:JavaScript Object Notation
我们知道存储数据交换数据可以通过XML(这个在之前的一篇博客讲到ASP.NET C#怎样读取XML中的数据),可以通过数据库(这个最普遍),也可以通过JSON。
JSON是纯文本,没有结束标签。
可以使用数组,有层级结构(这个就预示着下面可以用stuList.stuList[0].stuName这种写法)
JSON的语法类似XML,但相比之下,比XML更小,更快,更容易解析。
(这个实质上就是对JavaScript对象的操作,把JSON数组或对象看成JavaScript对象进行处理,如果JSON是写在另外一个文本中的就先把其转换解析成JavaScript对象)
暂时不考虑C#对JSON的解析。
注意:这里只要认清这两点就行了
1.JSON语法是JavaScript对象表示法语法的子集
2.因为1,所以无需额外的东西就能处理JavaScript中的JSON
JSON用的最多的是JSON对象和JSON数组,其中JSON数组用的最为频繁。
JSON对象:
{&stuName&:&钢铁侠&,&stuAge&:20}
(stuList数组包含了三个对象):
{&stuList&:
{&stuName&:&钢铁侠&,&stuAge&:20}
{&stuName&:&蜘蛛侠&,&stuAge&:30}
{&stuName&:&蝙蝠侠&,&stuAge&:40}
下面就是一个JSON数组的例子,
其实对于JavaScript处理这种JSON数据实质上就看成处理的JavaScript对象。
&!DOCTYPE html&
&meta http-equiv=&Content-Type& content=&text/ charset=utf-8& /&
&title&&/title&
&script type=&text/javascript&&
var stuList = {
&stuList&:
{ &stuName&: &钢铁侠&, &stuAge&: 20, &stuImage&: &images/1.png& },
{ &stuName&: &蜘蛛侠&, &stuAge&: 30, &stuImage&: &images/2.png& },
{ &stuName&: &蝙蝠侠&, &stuAge&: 40, &stuImage&: &images/3.png& },
{ &stuName&: &绿巨人&, &stuAge&: 50, &stuImage&: &images/4.png& }
var length = stuList.stuList.
var stu1_name = stuList.stuList[0].stuN
alert(stu1_name);
以上是JSON形式的数据已经写在JavaScript中的情形,那么怎么把写在文本中的数据转换成JavaScript对象再进行处理呢
总结就是一句话:json不作为外部文件就不需要eval()解析,如果直接在js中定义的json类型的数据,可以直接通过对象找到对应的值。
这个在W3CShool中讲的很好,
主要就是用JavaScript的eval()函数进行解析
,我这里就再写一遍。
&h2&通过 JSON 字符串来创建对象&/h3&
First Name: &span id=&fname&&&/span&&br /&
Last Name: &span id=&lname&&&/span&&br /&
&script type=&text/javascript&&
var txt = '{&employees&:[' +
'{&firstName&:&Bill&,&lastName&:&Gates& },' +
'{&firstName&:&George&,&lastName&:&Bush& },' +
'{&firstName&:&Thomas&,&lastName&:&Carter& }]}';
var obj = eval (&(& + txt + &)&);
document.getElementById(&fname&).innerHTML=obj.employees[1].firstName
document.getElementById(&lname&).innerHTML=obj.employees[1].lastName
在比较新的浏览器,提供了原生的JSON支持,而且这种JSON解析更快。
这里的代码重要把
var obj = eval(&(&+ txt +&)&)
var obj = JSON.parse(txt) &//这个是在较新的浏览器的情况下
已发表评论数()
&&登&&&陆&&
已收藏到推刊!
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见使用jQuery解析json的注意事项 -
- ITeye技术网站
博客分类:
问题背景:
所做的页面是与ps系统(oracle的people soft)交互,以json格式传递数据,页面中请求ps中的iscript(权当请求地址即可),返回json格式的字符串(注意返回的是字符串,并不是json数据,还不存在对象关系)
开始的做法是引用了prototype.js来把字符串解析为json对象,但由于项目中也引用了jQuery.js 这就造成了 $ 符号冲突,虽然可以使用jQuery.noConflict(); 来解决此问题,但毕竟代码要做修改,要把所有使用$符号的jQuery代码替换掉,很费时间
普及一个概念,这也是出现此问题的原因,原以为服务器传递回的json格式的数据,就已经是json对象,想使用点操作符来获取字符串中的对象,得不到才使用的prototype.js来解决,服务器其实只是给你返回了json格式的字符串,但并不是json对象,所以不能直接使用该数据,需要转成json对象才能使用里面的属性
注意上面的描述 一直在强调返回的是 json格式的字符串 一定要分清楚json对象和字符串的区别
①:可以继续使用prototype.js 来解析json格式的字符串,但jQuery的操作符$,要换成其他字符(不推荐)
②:去掉prototype.js,使用js提供的eval()函数来解析json格式的字符串,即可得到json对象
//参保人集合
var jsonData = eval("("+data+")");//转换为json对象
var person = jsonData.BENEFIT_INFO;
BENEFIT_INFO 是解析后的json对象中的属性
使用eval()函数时要注意的问题就是括号的问题,下面是摘录其他人的资料,不是完全懂,做为借鉴,有了解的朋友可以留言,为我解答一下
var dataObj=eval("("+data+")");//转换为json对象
为什么要 eval这里要添加 “("("+data+")");//”呢?
原因在于:eval本身的问题。 由于json是以”{}”的方式来开始以及结束的,在JS中,它会被当成一个语句块来处理,所以必须强制性的将它转换成一种表达式。
加上圆括号的目的是迫使eval函数在处理JavaScript代码的时候强制将括号内的表达式(expression)转化为对象,而不是作为语 句(statement)来执行。举一个例子,例如对象字面量{},如若不加外层的括号,那么eval会将大括号识别为JavaScript代码块的开始 和结束标记,那么{}将会被认为是执行了一句空语句。所以下面两个执行结果是不同的:alert(eval("{}"); // return undefinedalert(eval("({})");// return object[Object]
对于这种写法,在JS中,可以到处看到。
如: (function()) {}();
做闭包操作时等。
如果使用的是java工程,可以使用第三方jar来把json格式的字符串转成json对象,再传递到前台,这时前台就可以直接使用json对象中的数据,不用先转json对象了
浏览: 39670 次
来自: 北京
Good! add oil.
好比 你以前开食品店 现在改开服装店
你会发现 以前食品店的 ...
Good! 总结的非常好。
侵入式是不是相当于一个类中不会用到的,但是框架页推给了它呢 ...

我要回帖

更多关于 js json解析 eval 的文章

 

随机推荐