在做与服务器交互数据的时候,我们通常会发起一个Ajax请求,然后服务器返回一个类似'{x:1,y:1}'结构的json字符串,为了方便客户端处理我们会将其转换为一个对象直接量,这很多的时候通过一个eval来实现 。

var jsonstr = '{x : 1, y : 1}';
var jsonobj = eval('(' + jsonstr + ')');

如果eval的时候不加括号还会报脚本错误,这是为什么呢?

因为eval中 是一个执行环境,当你不用括号的时候{x : 1, y : 1}整个被解释成一个复合语句,{和}在这里就是一个符合语句的分隔符,而不是我们原本认为的对象直接量的一种语法方式。就像我们通常写if(true){x=1;}这里的大括号也是充当着复合语句的作用。接下来x:被解释成标签,像通常用的swicth case语句中的case x:也是一种标签,至于标签的其他用法可以参考相关资料。后面的1被当做一个数字直接量,遇到y被解释成变量标示符,然后再继续解析y后的冒号时就出错了,因为无法识别。所以如果你写成eval('{x : 1, y = 1}')就不会报错了,因为y=1是可以被识别的, y=1后eval的结果是返回1。但是为什么前后加个括号就可以了呢,因为括号在这里表示强制执行,整个'(' +  jsonStr + ')'其实被解释成一个表达式运算,而不是一个复合语句,因此jsonStr中的大括号{}被当成对象的语法来识别,当然就可以了。

说完了上面,我们再来看一个例子,如果我们写eval('{x:1}')这样呢,这会报错吗?
答案是不会,因为虽然{x:1}被认为是一个复合语句,但是x:1这样的写法是没错的,当做标签来识别,因此结果返回1 ,说白了只要让{……}所表示的复合语句不让解析不能理解就可以了,如{x:1, y=1,z=6}不会报错,返回最后的结果6。

PS:当服务器返回的为json数组字符串的结构时 如:"[{x:1,y:2}]",直接使用eval()进行转换是没有问题的。

var josnstr = "[{x:1,y=2}]";
var jsonarr = eval(jsonstr);

--------------------- 
作者:第三眼的思绪 
原文:https://blog.csdn.net/A123638/article/details/38032401

eval与json转换相关推荐

  1. javascript eval和JSON之间的联系

    eval函数的工作原理 eval函数会评估一个给定的含有JavaScript代码的字符串,并且试图去执行包含在字符串里的表达式或者一系列的合法的JavaScript语句.eval函数将把最后一个表达式 ...

  2. 浅入浅出JS中的eval及json

    声明: 首先声明一下,本人是JS新手,所以不敢说深入,只是把最近对eval的学习经验拿出来跟大家分享,如果您是高手可略去不看. 适合读者: 对JS中的eval一知半解,不知eval是如何把字符串转换为 ...

  3. Python JS Jquery Json 转换关系

    一.JS对象与JSON格式数据相互转换 目前的项目数据交互几乎都用JQuery,所以处理流程是: 前端页面数据->JS对象->jQuery提交->python处理,另外一种就是倒过来 ...

  4. Python-jsonpath使用和json转换

    (一)JSONPath-JSON的XPath JSONPath表达式始终以与XPath表达式与XML文档结合使用的相同方式引用JSON结构.由于JSON结构通常是匿名的,并且不一定具有"根成 ...

  5. eval()解析JSON

    eval()将JSON文本转换为javascript对象. 如: var data="{'elements':["+ "{'firstname':'yan','lastn ...

  6. js使用eval解析json(js中使用json)

    eval的用法eval函数接收一个参数s,如果s不是字符串,则直接返回s.否则执行s语句,下面给出eval解析json的示例 先来说eval的用法,内容比较简单,熟悉的可以跳过 eval函数接收一个参 ...

  7. 浅谈eval和json.loads

    eval和json.loads eval 用途 转原数据类型 转表达式并执行 json.loads 用途 示例 区别 一 二 三 eval 用途 1. 将字符串转原数据类型 2. 将字符串转成表达式并 ...

  8. python教程15-作业讲解、集合的使用、集合运算符的使用、eval和json的使用

    python教程_小白入门15/2020/8/26 学习目标 文章目录 python教程_小白入门15/2020/8/26 p102 作业讲解1 P103 作业讲解2 P104 集合的基本使用 P10 ...

  9. JSON转换和毫秒时间

    JSON转换和毫秒时间 String dataId = "0000000000003000-0001";String baisc= " { "+ " ...

最新文章

  1. 利用现有资源快速实现汉语专用分词系统
  2. mobile former测试
  3. python排序链表_合并K个排序链表
  4. 在Ubuntu14.04上安装UberWriterMarkdown编辑器
  5. Hi3520d uImage制作 uboot制作 rootfs制作
  6. AI 赛道“新选手”锐捷发布新一代 AI SaaS 云平台,支撑百万级零售货柜
  7. 案例学习BlazeDS+Spring之五InSync03强类型
  8. 第一个程序python-HelloWorld
  9. 站点页面Service Unavailable 503的一种解决方法
  10. SQLMAP安装及详解
  11. GULP 案例 1 代码解释:声子色散曲线和态密度的计算
  12. 华为路由器DHCP服务设置(一)
  13. ps--光照+光晕+模糊
  14. 在word中插入ppt
  15. 3GPP TS 23501-g51 中英文对照 | 4.4.2 SMS over NAS
  16. riak教程 java_Riak学习(2):java连接Riak服务,使用Protocol Buffers连接
  17. 设计模式 工厂模式 从卖肉夹馍说起
  18. switch语句总结
  19. caffe HDF5Data 层使用及数据生成
  20. 编译OpenBLAS

热门文章

  1. 苹果系统引导修复工具_苹果方面专家:搭载M1芯片的Mac电脑可引导其它系统 如Debian...
  2. IDEA-替换变量名小技巧
  3. 电子电路设计基本概念100问(六)【学习目标:原理图、PCB、阻抗设计、电子设计基本原则、基本原器件等】
  4. mysql实现同比环比的计算
  5. 复用数据库之中国地区表(除台湾外精确到地级市)
  6. 蝴蝶效应,青蛙现象,鳄鱼法则,鲇鱼效应,羊群效应,刺猬法则,手表定律,破窗理论,二八定律,木桶理论,马太效应,这些你都明白吗
  7. 给同校大一IT新生的建议
  8. 电力预测原始数据随机森林缺失值处理
  9. 上位机控制plc,上位机控制软件,ATECLOUD中国人自己的LabVIEW
  10. 中国CRO市场复合增速超20%高于全球平均水平