eval与json转换
在做与服务器交互数据的时候,我们通常会发起一个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转换相关推荐
- javascript eval和JSON之间的联系
eval函数的工作原理 eval函数会评估一个给定的含有JavaScript代码的字符串,并且试图去执行包含在字符串里的表达式或者一系列的合法的JavaScript语句.eval函数将把最后一个表达式 ...
- 浅入浅出JS中的eval及json
声明: 首先声明一下,本人是JS新手,所以不敢说深入,只是把最近对eval的学习经验拿出来跟大家分享,如果您是高手可略去不看. 适合读者: 对JS中的eval一知半解,不知eval是如何把字符串转换为 ...
- Python JS Jquery Json 转换关系
一.JS对象与JSON格式数据相互转换 目前的项目数据交互几乎都用JQuery,所以处理流程是: 前端页面数据->JS对象->jQuery提交->python处理,另外一种就是倒过来 ...
- Python-jsonpath使用和json转换
(一)JSONPath-JSON的XPath JSONPath表达式始终以与XPath表达式与XML文档结合使用的相同方式引用JSON结构.由于JSON结构通常是匿名的,并且不一定具有"根成 ...
- eval()解析JSON
eval()将JSON文本转换为javascript对象. 如: var data="{'elements':["+ "{'firstname':'yan','lastn ...
- js使用eval解析json(js中使用json)
eval的用法eval函数接收一个参数s,如果s不是字符串,则直接返回s.否则执行s语句,下面给出eval解析json的示例 先来说eval的用法,内容比较简单,熟悉的可以跳过 eval函数接收一个参 ...
- 浅谈eval和json.loads
eval和json.loads eval 用途 转原数据类型 转表达式并执行 json.loads 用途 示例 区别 一 二 三 eval 用途 1. 将字符串转原数据类型 2. 将字符串转成表达式并 ...
- python教程15-作业讲解、集合的使用、集合运算符的使用、eval和json的使用
python教程_小白入门15/2020/8/26 学习目标 文章目录 python教程_小白入门15/2020/8/26 p102 作业讲解1 P103 作业讲解2 P104 集合的基本使用 P10 ...
- JSON转换和毫秒时间
JSON转换和毫秒时间 String dataId = "0000000000003000-0001";String baisc= " { "+ " ...
最新文章
- 利用现有资源快速实现汉语专用分词系统
- mobile former测试
- python排序链表_合并K个排序链表
- 在Ubuntu14.04上安装UberWriterMarkdown编辑器
- Hi3520d uImage制作 uboot制作 rootfs制作
- AI 赛道“新选手”锐捷发布新一代 AI SaaS 云平台,支撑百万级零售货柜
- 案例学习BlazeDS+Spring之五InSync03强类型
- 第一个程序python-HelloWorld
- 站点页面Service Unavailable 503的一种解决方法
- SQLMAP安装及详解
- GULP 案例 1 代码解释:声子色散曲线和态密度的计算
- 华为路由器DHCP服务设置(一)
- ps--光照+光晕+模糊
- 在word中插入ppt
- 3GPP TS 23501-g51 中英文对照 | 4.4.2 SMS over NAS
- riak教程 java_Riak学习(2):java连接Riak服务,使用Protocol Buffers连接
- 设计模式 工厂模式 从卖肉夹馍说起
- switch语句总结
- caffe HDF5Data 层使用及数据生成
- 编译OpenBLAS
热门文章
- 苹果系统引导修复工具_苹果方面专家:搭载M1芯片的Mac电脑可引导其它系统 如Debian...
- IDEA-替换变量名小技巧
- 电子电路设计基本概念100问(六)【学习目标:原理图、PCB、阻抗设计、电子设计基本原则、基本原器件等】
- mysql实现同比环比的计算
- 复用数据库之中国地区表(除台湾外精确到地级市)
- 蝴蝶效应,青蛙现象,鳄鱼法则,鲇鱼效应,羊群效应,刺猬法则,手表定律,破窗理论,二八定律,木桶理论,马太效应,这些你都明白吗
- 给同校大一IT新生的建议
- 电力预测原始数据随机森林缺失值处理
- 上位机控制plc,上位机控制软件,ATECLOUD中国人自己的LabVIEW
- 中国CRO市场复合增速超20%高于全球平均水平