`
webdev2014
  • 浏览: 678148 次
文章分类
社区版块
存档分类
最新评论

JS中生成与解析JSON

 
阅读更多


js中生成json对象


js中解析json字符串:

1.eval("..."):

var a_id=eval(‘{"name":123}’);

如果eval中的内容含有恶意脚本就麻烦了


2.json_parse:

需要导入json_parse.js:

<script src="js/json_parse.js"></script>
<script language="javascript">
var t = json_parse('{"name":123}');
alert(t.name);
</script>>

安全,解析速度快


3.var vjson = JSON.parse(jsonstr):

支持IE8和fireFox3这两个有内置json对象的浏览器;其他浏览器要引入json.js文件

<script src="js/json.js"></script>
<script language="javascript">
var t = JSON.parse('{"name":123}');
alert(t.name);
</script>
安全,解析速度也很快。




----------------------------------分割线-------------------------------------------------------

js中解析json字符串



JSON.stringify

语法:
JSON.stringify
(value [, replacer] [, space])
value:是必须要的字段。就是你输入的对象,比如数组啊,类啊等等。
replacer:这个是可选的。它又分为2种方式,一种是方法,第二种是数组。
情况一:我们先说数据,通过我们后面的实验可以知道,它是和第一个有关系的。一般来说,我们系列化后的结果是通过键值对来进行表示的。
比如说:
name:"lan",age:25
这种形式。
所以,如果这种形式的话,如果第二个的值在第一个存在,那么的话就以第二个的值做key,第一个值为value进行表示,如果不存在,sorry,忽略。【是不是有点抽象,我也这么觉得,不过你等一下看实验 就OK了。。呼呼。】
情况二:如果是方法,那很简单,就是说把系列化后的每一个对象(记住 是每一个)传进方法里面进行处理。
space:很好理解,用什么来做分隔符的。
1.如果省略的话,那么显示出来的值 就没有分隔符。直接输出来
2.如果是一个数字的话,那么它就定义缩进几个字符,当然 如果大于10 ,则最大值为10.
3.如果是一些转义字符,比如“\t”,表示回车,那么它每行一个回车。
4.如果仅仅是字符串,OK,就在每行输出值的时候把这些字符串附加上去就OK。当然,最大长度也是10个字符。
开始用实例说明;
1.只有一个参数的情况下:

复制代码代码如下:

var student = new Object();
student.name = "Lanny";
student.age = "25";
student.location = "China";
var json =JSON.stringify(student);
alert(student);

结果如下:

有些人可能会怀疑JSON.stringify的作用,OK。那假如,我们不要这个函数。代码下面的样子:
复制代码代码如下:

var student = new Object();
student.name = "Lanny";
student.age = "25";
student.location = "China";

// var json =JSON.stringify(student);
alert(student);

 恭喜你 得到的结果是:

没骗你吧,继续。
2.第二个参数存在,并且第二个参数还是function的时候

复制代码代码如下:

var students = new Array() ;
students[0] = "Lanny";
students[1] = "dong";
students[2] = "I love you";
var json =JSON.stringify(students,switchUpper);
function switchUpper(key, value) {
return value.toString().toUpperCase();
}
alert(json);

        //var json =JSON.stringify(students, function (key,value) {

        //return value.toString().toUpperCase();

       //});

    上面的方法也可以换成下面的,2个都是一样,只是写法有那么一点点的不一样而已。
 得到结果如下:

3.第二个参数存在,并且第二个参数不是function,而是数组的时候。
3.1 【误区】如果第一个参数是数组,第二个参数也是数组的话,只显示第一个参数的值。
比如:

复制代码代码如下:

var students = new Array() ;
students[0] = "Lanny";
students[1] = "dong";
students[2] = "I love you";
var stu = new Array();
stu[0] = "1";
stu[1] = "2";
var json =JSON.stringify(students,stu);
alert(json);

 sorry 得到的结果就是:

第二个被忽略了,只是第一个被系列化了。

3.2 如果第一个是对象(这里说的对象就像在C#里面可以进行new的),第二个是数组的。

那么如果第二个的value在第一个存在,那么的话就以第二个的值做key,第一个值为value进行表示
复制代码代码如下:

var student = new Object();
student.qq = "5485891512";
student.name = "Lanny";
student.age = 25;

var stu = new Array();
stu[0] = "qq";
stu[1] = "age";
stu[2] = "Hi";//这个student对象里不存在。

var json =JSON.stringify(student,stu);
alert(json);

 得到的结果如下:

因为stu[2] = "Hi";这个Hi 在第一个找不到,所以就不进行显示了。

4.第三个参数

4.1.如果省略的话,那么显示出来的值 就没有分隔符。直接输出来

比如:
复制代码代码如下:

var student = new Object();
student.qq = "5485891512";
student.name = "Lanny";
student.age = 25;

var stu = new Array();
stu[0] = "qq";
stu[1] = "age";
stu[2] = "Hi";

var json =JSON.stringify(student,stu);
alert(json);

 输出的就是:

4.2.如果是一个数字的话,那么它就定义缩进几个字符,当然 如果大于10 ,则最大值为10.
复制代码代码如下:

var student = new Object();
student.qq = "5485891512";
student.name = "Lanny";
student.age = 25;

var stu = new Array();
stu[0] = "qq";
stu[1] = "age";
stu[2] = "Hi";

var json =JSON.stringify(student,stu,100);//注意这里的100
alert(json);

那么得到的是:

空开来了10个字符。

4.3.如果是一些转义字符,比如“\t”,表示回车,那么它每行一个回车。

也是一样。

4.4.如果仅仅是字符串,OK,就在每行输出值的时候把这些字符串附加上去就OK。当然,最大长度也是10个字符。

如果是var json =JSON.stringify(student,stu,“HaiKou”);//


--------------------------------------------------------------------------------------------------------------------------

var dataObj=eval("("+data+")");//转换为json对象

Red rose为什么要 eval这里要添加 “("("+data+")");//”呢?

原因在于:eval本身的问题。 由于json是以”{}”的方式来开始以及结束的,在JS中,它会被当成一个语句块来处理,所以必须强制性的将它转换成一种表达式。

加上圆括号的目的是迫使eval函数在处理JavaScript代码的时候强制将括号内的表达式(expression)转化为对象,而不是作为语 句(statement)来执行。举一个例子,例如对象字面量{},如若不加外层的括号,那么eval会将大括号识别为JavaScript代码块的开始 和结束标记,那么{}将会被认为是执行了一句空语句。所以下面两个执行结果是不同的:
alert(eval("{}"); // return undefined
alert(eval("({})");// return object[Object]

对于这种写法,在JS中,可以到处看到。

如: (function()) {}(); 做闭包操作时等。




js中生成json对象


js中解析json字符串:

1.eval("..."):

var a_id=eval(‘{"name":123}’);

如果eval中的内容含有恶意脚本就麻烦了


2.json_parse:

需要导入json_parse.js:

<script src="js/json_parse.js"></script>
<script language="javascript">
var t = json_parse('{"name":123}');
alert(t.name);
</script>>

安全,解析速度快


3.var vjson = JSON.parse(jsonstr):

支持IE8和fireFox3这两个有内置json对象的浏览器;其他浏览器要引入json.js文件

<script src="js/json.js"></script>
<script language="javascript">
var t = JSON.parse('{"name":123}');
alert(t.name);
</script>
安全,解析速度也很快。




----------------------------------分割线-------------------------------------------------------

js中解析json字符串



JSON.stringify

语法:
JSON.stringify
(value [, replacer] [, space])
value:是必须要的字段。就是你输入的对象,比如数组啊,类啊等等。
replacer:这个是可选的。它又分为2种方式,一种是方法,第二种是数组。
情况一:我们先说数据,通过我们后面的实验可以知道,它是和第一个有关系的。一般来说,我们系列化后的结果是通过键值对来进行表示的。
比如说:
name:"lan",age:25
这种形式。
所以,如果这种形式的话,如果第二个的值在第一个存在,那么的话就以第二个的值做key,第一个值为value进行表示,如果不存在,sorry,忽略。【是不是有点抽象,我也这么觉得,不过你等一下看实验 就OK了。。呼呼。】
情况二:如果是方法,那很简单,就是说把系列化后的每一个对象(记住 是每一个)传进方法里面进行处理。
space:很好理解,用什么来做分隔符的。
1.如果省略的话,那么显示出来的值 就没有分隔符。直接输出来
2.如果是一个数字的话,那么它就定义缩进几个字符,当然 如果大于10 ,则最大值为10.
3.如果是一些转义字符,比如“\t”,表示回车,那么它每行一个回车。
4.如果仅仅是字符串,OK,就在每行输出值的时候把这些字符串附加上去就OK。当然,最大长度也是10个字符。
开始用实例说明;
1.只有一个参数的情况下:

复制代码代码如下:

var student = new Object();
student.name = "Lanny";
student.age = "25";
student.location = "China";
var json =JSON.stringify(student);
alert(student);

结果如下:

有些人可能会怀疑JSON.stringify的作用,OK。那假如,我们不要这个函数。代码下面的样子:
复制代码代码如下:

var student = new Object();
student.name = "Lanny";
student.age = "25";
student.location = "China";

// var json =JSON.stringify(student);
alert(student);

 恭喜你 得到的结果是:

没骗你吧,继续。
2.第二个参数存在,并且第二个参数还是function的时候

复制代码代码如下:

var students = new Array() ;
students[0] = "Lanny";
students[1] = "dong";
students[2] = "I love you";
var json =JSON.stringify(students,switchUpper);
function switchUpper(key, value) {
return value.toString().toUpperCase();
}
alert(json);

        //var json =JSON.stringify(students, function (key,value) {

        //return value.toString().toUpperCase();

       //});

    上面的方法也可以换成下面的,2个都是一样,只是写法有那么一点点的不一样而已。
 得到结果如下:

3.第二个参数存在,并且第二个参数不是function,而是数组的时候。
3.1 【误区】如果第一个参数是数组,第二个参数也是数组的话,只显示第一个参数的值。
比如:

复制代码代码如下:

var students = new Array() ;
students[0] = "Lanny";
students[1] = "dong";
students[2] = "I love you";
var stu = new Array();
stu[0] = "1";
stu[1] = "2";
var json =JSON.stringify(students,stu);
alert(json);

 sorry 得到的结果就是:

第二个被忽略了,只是第一个被系列化了。

3.2 如果第一个是对象(这里说的对象就像在C#里面可以进行new的),第二个是数组的。

那么如果第二个的value在第一个存在,那么的话就以第二个的值做key,第一个值为value进行表示
复制代码代码如下:

var student = new Object();
student.qq = "5485891512";
student.name = "Lanny";
student.age = 25;

var stu = new Array();
stu[0] = "qq";
stu[1] = "age";
stu[2] = "Hi";//这个student对象里不存在。

var json =JSON.stringify(student,stu);
alert(json);

 得到的结果如下:

因为stu[2] = "Hi";这个Hi 在第一个找不到,所以就不进行显示了。

4.第三个参数

4.1.如果省略的话,那么显示出来的值 就没有分隔符。直接输出来

比如:
复制代码代码如下:

var student = new Object();
student.qq = "5485891512";
student.name = "Lanny";
student.age = 25;

var stu = new Array();
stu[0] = "qq";
stu[1] = "age";
stu[2] = "Hi";

var json =JSON.stringify(student,stu);
alert(json);

 输出的就是:

4.2.如果是一个数字的话,那么它就定义缩进几个字符,当然 如果大于10 ,则最大值为10.
复制代码代码如下:

var student = new Object();
student.qq = "5485891512";
student.name = "Lanny";
student.age = 25;

var stu = new Array();
stu[0] = "qq";
stu[1] = "age";
stu[2] = "Hi";

var json =JSON.stringify(student,stu,100);//注意这里的100
alert(json);

那么得到的是:

空开来了10个字符。

4.3.如果是一些转义字符,比如“\t”,表示回车,那么它每行一个回车。

也是一样。

4.4.如果仅仅是字符串,OK,就在每行输出值的时候把这些字符串附加上去就OK。当然,最大长度也是10个字符。

如果是var json =JSON.stringify(student,stu,“HaiKou”);//


--------------------------------------------------------------------------------------------------------------------------

var dataObj=eval("("+data+")");//转换为json对象

Red rose为什么要 eval这里要添加 “("("+data+")");//”呢?

原因在于:eval本身的问题。 由于json是以”{}”的方式来开始以及结束的,在JS中,它会被当成一个语句块来处理,所以必须强制性的将它转换成一种表达式。

加上圆括号的目的是迫使eval函数在处理JavaScript代码的时候强制将括号内的表达式(expression)转化为对象,而不是作为语 句(statement)来执行。举一个例子,例如对象字面量{},如若不加外层的括号,那么eval会将大括号识别为JavaScript代码块的开始 和结束标记,那么{}将会被认为是执行了一句空语句。所以下面两个执行结果是不同的:
alert(eval("{}"); // return undefined
alert(eval("({})");// return object[Object]

对于这种写法,在JS中,可以到处看到。

如: (function()) {}(); 做闭包操作时等。


分享到:
评论

相关推荐

    PB解析和生成JSON

    PB解析和生成JSON,解析JSON是否成功,生成默认JSON。

    struts2.3.20生成返回json 浏览器解析json

    struts2.3.20生成返回json 浏览器解析json!

    stm32使用cjson解析json字符串.zip

    JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式。它基于 ECMAScript (欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次...

    js 解析 json 生成树

    都已经封装好了,只需要在test.html里面传递JSON的格式数据就可以了,节点动态生成。

    javascript将url解析为json格式的两种方法.docx

    javascript将url解析为json格式的两种方法.docx

    超简单使用C++解析json:jsoncpp

     对于JSON格式,在此就不作详细的说明了,下面主要讨论下C++解析json文件的工具—Jsoncpp的使用。 下载地址: https://github.com/open-source-parsers/jsoncpp/tree/1.8.4 配置说明:  从github上download代码后...

    json解析工具_32位

    绝对好的用 json解析工具 json解析 json工具 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于ECMAScript的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯...

    推荐.NET下JSON应用大全全解析

    它易于编程人员阅读和编写,同时也易于机器解析和生成。它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一个子集。JSON采用完全独立于语言的文本格式,但是也使用了类似于...

    读取json数据动态生成table

    用js加载json数据,然后用table显示。

    simple-jsonrpc-js:简单的jsonrpc javascript库。 生成并解析json rpc消息

    simple-jsonrpc-js 客户端和服务器。 支持websocket和http。 完全支持JSON-RPC 2.0(包括自动递增的请求ID) 最初由创建。 () ( )编写的一些更新 浏览器快速入门 为了在浏览器中使用,您可以从CDNSwift将其...

    javascript解析json实例详解

    本文实例讲述了javascript解析json的方法。分享给大家供大家参考。具体方法如下: 下载json库 http://www.json.org/json-zh.html自己找javascript的 或者直接去下面的 https://github.com/douglascrockford/JSON-js ...

    JSON客户端与服务器端生成JSON数据及传递方法

    尽管有许多宣传关于 XML 如何拥有跨平台,跨语言的优势,然而,除非应用于 Web Services,否则,在普通的 Web 应用中,开发者经常为 XML 的解析伤透了脑筋,无论是服务器端生成或处理 XML,还是客户端用 JavaScript ...

    C#使用LitJson解析JSON的示例代码

    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。...易于人阅读和编写,同时也易于机器解析和生成。 如果曾经使用过Json,就会清楚Json可以分为两个部分: 1. Json Object(A collection

    Golang 如何解析和生成json

    JSON与XML最大的不同在于XML是一个完整的标记语言,而JSON不是。JSON由于比XML更小、更快,更易解析,以及浏览器的內建快速解析支持,使得其更适用于网络数据传输领域。 Golang自带的JSON解析库encoding/json,可以...

    json-asty:无损JSON至AST解析器和AST至JSON生成器

    JSON-ASTy是一个JavaScript库,为抽象语法树(AST)解析器提供了无损JavaScript对象表示法(JSON),并为JSON生成器提供了相应的AST。 它用于需要将JSON读入AST,操纵AST并再次从AST生成JSON的同时完全保留原始JSON...

    谈谈iOS开发之JSON格式数据的生成与解析

    本文将从四个方面对IOS开发中JSON格式数据的生成与解析进行讲解: 一、JSON是什么? 二、我们为什么要用JSON格式的数据? 三、如何生成JSON格式的数据? 四、如何解析JSON格式的数据? JSON格式取代了xml给网络传输...

    C#的JavaScript和Json帮助类

    JavaScript(简称JS)是一种面向对象的脚本语言,主要用于在网页上实现交互和动态效果。它最初是为了在浏览器中操作网页元素而...JavaScript提供了内置的JSON对象,可以通过JSON对象的方法来解析和生成JSON格式的数据。

    json数据的生成

    JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。... 易于人阅读和编写,同时也易于机器解析和生成(网络传输速度)。

    C#解析json文件的实现代码

    JSON与XML的比较 ◆可读性 JSON和XML的可读性相比较而言,由于XML提供辅助的标签,更加适合人阅读和理解。◆文件大小与传输 XML允许使用方便的标签,所以文件尺寸是要比JSON大的。而且JSON源于Javascript,所以...

    JS中Json数据的处理和解析JSON数据的方法详解

    易于人阅读和编写,同时也易于机器解析和生成(一般用于提升网络传输速率)。 JSON的规则很简单: 对象是一个无序的“‘名称/值’对”集合。一个对象以“{”(左括号)开始,“}”(右括号)结束。每个“名称”后跟一...

Global site tag (gtag.js) - Google Analytics