JSON字符串的解析

JSON(JavaScript Object Notation)是一种轻量级的数据格式,采用完全独立于语言的文本格式,是理想的数据交换格式。同时,JSON是Javascript原生格式,这意味着在javascript中处理JSON数据不需要任何特殊的API或工具包,而且效率非常高。

JSON的结构如下:

  • “名称/值”对的集合(A collection of name/value pairs)。不同的语言中,它被理解为对象(object),纪录(record),结构(struct),字典(dictionary),哈希表(hash table),有键列表(keyed list),或者关联数组 (associative array)。
  • 值的有序列表(An ordered list of values)。在大部分语言中,它被理解为数组(array)

一个标准的json格式:

{"name":"jifeng","company":"taobao"}

总体而言,json是相对比较容易的理解和使用的,但同时存在很多的陷阱,如果不注意的话很容易掉进去,本文主要就是讲诉它容易让人犯错的地方。

一、json的的解析方法

json的解析方法共有两种:1. eval() ; 2.JSON.parse()。具体使用方法如下

 jsonstr = ‘{"name":"jifeng","company":"taobao"}‘;
 evalJson = eval(‘(‘ + jsonstr + ‘)‘);
 JSONParseJson = JSON.parse(jsonstr);

既然两者都能达到解析json的结果,但这两者有什么区别呢?我用以下的一个例子来进行说明:

1. 用eval方法:

 parse_json_by_eval = (str){
     eval(‘(‘+str+‘)‘);
}

 value = 1;
 jsonstr = ‘{"name":"jifeng","company":"taobao","value":++value}‘;
 json1 = parse_json_by_eval(jsonstr);
console.log(json1);
console.log(‘value: ‘+ value);

执行结果:

{ name: ‘jifeng‘, company: ‘taobao‘, value: 2 }
value: 2

2. 用JSON.parse方法

 parse_json_by_JSON_parse = (str){
     JSON.parse(str);
}

value = 1;
 jsonstr = ‘{"name":"jifeng","company":"taobao","value":++value}‘;
 json2 = parse_json_by_JSON_parse(jsonstr);
console.log(json2);
console.log(value);

执行结果:

不能顺利执行,报错

前者能顺利执行,并修改了全局变量value的值,而后者报错了。从上例就可以明显地看出,eval在解析字符串时,会执行该字符串中的代码(这样的后果是相当恶劣的),如上例中,由于用eval解析一个json字符串而造成原先的value的值改变。《高性能Javascript》一书即指出:

警告:关于JSON和eval需要注意的是:在代码中使用eval是很危险的,特别是用它执行第三方的JSON数据(其中可能包含恶意代码)时,尽可能使用JSON.parse()方法解析字符串本身。该方法可以捕捉JSON中的语法错误,并允许你传入一个函数,用来过滤或转换解析结果。如果此方法以备Firfox 3.5 、IE8 及 Safari 4 原生支持。大多数javascript类库包含的JSON解析代码会直接调用原生版本,如果没有原生支持的话,会调用一个略微不那么强大的非原生版本来处理。

时间: 2024-10-10 19:27:00

JSON字符串的解析的相关文章

JSON字符串——后台解析系列

以前我们都是讲JSON字符串获取后,在前台进行展示.今天小编就交给大家后台解析展示数据的方法.非常方便,就以下代码: JObject obj = JObject.Parse(data); string serial_number = obj["entry"]["serial_number"].ToString(); string level_1 = obj["entry"]["field_23"]["level_1&

解析Json字符串跟解析Json数组

解析Json字符串我这边是使用了JObject的方法 需要引用一个类库 需要下载Newtonsoft.Json.rar dll 然后引用 using Newtonsoft.Json;using Newtonsoft.Json.Linq; 第一个为解析字符串格式的Json 1 JObject jo = (JObject)JsonConvert.DeserializeObject(result);//result为要解析的字符串 2 string errcode = jo["errcode"

Python - json字符串的解析

import json jsonString = '{"arrayOfNums":[{"number":0},{"number":1},{"number":2}],"arrayOfFruits":[{"fruit":"apple"},{"fruit":"banana"},{"fruit":"pear

Java后台解析android端发送的JSON字符串

在设备通讯中,往往会用到数据交互.我们这里用的是通过HTTP协议发送JSON数据,android客户端把数据进行打包,发送到后台服务器,后台解析出来. //android客户端拼装JSON字符串 //如下的拼装结果为: {"data":[{"id":"12345","name":"张三"},{"id":"54321","name":"李四

Qt平台下使用QJson解析和构建JSON字符串

前言 上一篇介绍了C语言写的JSON解析库cJSON的使用:使用cJSON库解析和构建JSON字符串 本篇文章介绍,Qt开发环境下QJson库的使用示例,JSON解析配合API接口,就可以实现一些有趣的工具了,如全国油价查询工具,全国天气查询,空气质量查询,黄历查询,生活指数等等实用工具的开发. 分享几个免费的API提供平台: K780:http://www.k780.com/api 天气API:http://api.help.bj.cn/api/ 心知天气:https://www.senive

如何解析字段名称不确定的json字符串

问题如下 下面是一个json字符串,有其他系统提交过来的,当前需要对该json字符串进行解析,需要注意的是,外层的key是不确定的(随机的字符串),但是内层的value字段名称和类型都可以确定. { "fa490c67-bdb2-4ddd-810d-894e9ceeba0e":{ "top":191, "left":55, "process_to":[ "bd7c788d-9d2f-48da-80ad-726edb8

json字符串的拼接

关于json字符串的解析与拼接,第一次接触,留下个笔记了.......解析,是改的代码,拼接是纯的,解析就不说了,笔记一下拼接了 关于解析主要分三部分,一个是第一层处理,一个是第二层处理,一个是进行","的处理.其实再往深一层的也可以,我认为,那个代码得修改修改了. Public Function yiceng(a(), b()) As StringDim l As Integerl = UBound(a) - LBound(a) + 1Dim str As Stringstr = s

ajax请求返回json字符串/json对象 处理

1. 返回json字符串如何处理 $.ajax({ url:xxx, success:function(date){ }, error:function(){ } }); 通过最原始的返回: PrintWriter out = httpServletResponse.getWriter(): ObjectMapper mapper = new ObjectMapper(); Map map = new HashMap(); map.put("name","zz");

C++ 基于rapidjson对json字符串的进行序列化与反序列化

json字符串的解析以封装在我们开发过程中经常见到, 尤其在socket通信上面, 在一次项目中碰到json字符串的进行解析, 而公司有没有封装好的库, 于是就自己基于开源的库进行了一次封装, 接下是使用案例, 如果感觉可以, 就去下载我的源代码自己编译一个库出来(能直接编译通过, 无任何依赖), 下载地址: 上传的CSDN资源正在审核当中, 如果现在需要请联系QQ:497725486, 等审核通过, 把链接贴上 jsonObjDefine.h #pragma once #include "..