您的位置:首页 > Web前端 > JavaScript

JSON之JSON.stringify()、JSON.parse()与json之json.dumps()、json.loads()区别

2018-02-28 16:39 1906 查看
json在线教程网站:https://www.sojson.com/json/json_stringify.html
一、JSON介绍
    JSON是基于文本的数据格式,相对于基于二进制的数据,所以JSON在传递的时候是传递符合JSON这种格式(至于JSON的格式是什么我们第二部分再说)的字符串,我们常会称为“JSON字符串”。

    先就以“键值对为表现的对象”形式上,对比下两者的不同,至于JSON还能以怎样的形式表现,对比完后再罗列。
对比内容JSONJS对象
键名必须是加双引号可允许不加、加单引号、加双引号
属性值只能是数值(10进制)、
字符串(双引号)、
布尔值和null,
也可以是数组或者符合
JSON要求的对象,
不能是函数、NaN, Infinity,
 -Infinity和undefined
爱啥啥
逗号问题最后一个属性后面不能有逗号可以
数值前导0不能用,小数点后必须有数字没限制
可以看到,相对于JS对象,JSON的格式更严格,所以大部分写的JS对象是不符合JSON的格式的。1、var obj1 = {}; // 这只是 JS 对象
// 可把这个称做:JSON 格式的 JavaScript 对象
var obj2 ={"width":100,"height":200,"name":"rose"};json格式化后是:



2、// 这个可叫 JSON 格式的数组,是 JSON 的稍复杂一点的形式
var arr = [ {"width":100,"height":200,"name":"rose"},{"width":100,"height":200,"name":"rose"}, {"width":100,"height":200,"name":"rose"},]json格式化的数据为:



注意:
下面是错误的,



3、{'salists': [{'chid':3,'proid': 3, 'name': '芬达', 'count': 2, 'sinPrice': 1.5, 'toPrice': 3}], 'nums': 2}json格式化的结果是:



4、
JSON.stringify()是将JSON格式的对象转成JSON格式的对象的字符串。。。。。。。。。



其中后台接收前台的json字符串是:



后台返给前台的json字符串是:



5、
前端:



后台:





后台打印结果:



json.dumps()前的wds字典:



wds对象不是json格式字符串,
其中json.dumps()后的数据类型是json格式的str,即将dict对象转成json格式的对象字符串。。。



然后前台的JSON.parse()是将后来传来的json格式的对象字符串转成JSON格式(就是个文本格式)的对象。。。。。后面去对象中的某个元素还是按照对象的属性和方法来取。。。。。。
前台打印的结果:
(注意,手机APP进入导航栏的主页时,同时会加载导航栏上的别的页面。结果的第三、四、五行是Hbuilder mui写底下导航栏时,加载的导航栏所有页面中输出的结果。)



6、
6.1. 将JS数据结构转化为JSON字符串——JSON.stringify 
这个函数的函数签名是这样的:
JSON.stringify(value[, replacer [, space]])  
下面将分别展开带1~3个参数的用法,最后是它在序列化时做的一些“聪明”的事,要特别注意。6.1.1 基本使用——仅需一个参数 这个大家都会使用,传入一个JSON格式的JS对象或者数组,JSON.stringify({“name”:”Good Man”,”age”:18})返回一个字符串”{“name”:”Good Man”,”age”:18}”6.2.将JSON字符串解析为JS数据结构——JSON.parse 这个函数的函数签名是这样的:
JSON.parse(text[, reviver])  
如果第一个参数,即JSON字符串不是合法的字符串的话,那么这个函数会抛出错误,所以如果你在写一个后端返回JSON字符串的脚本,最好调用语言本身的JSON字符串相关序列化函数,而如果是自己去拼接实现的序列化字符串,那么就尤其要注意序列化后的字符串是否是合法的,合法指这个JSON字符串完全符合JSON要求的严格格式。值得注意的是这里有一个可选的第二个参数,这个参数必须是一个函数,这个函数作用在属性已经被解析但是还没返回前,将属性处理后再返回。7、
JSON.parse()
是Javascript中一个常用的 JSON 转换方法,
JSON.parse()
可以把JSON规则的字符串转换为JSONObject,
JSON.parse()
很方便,并且几乎支持所有浏览器

JSON.parse() 语法

JSON.parse(text[, reviver])
//text:需要被转换的字符串。
//[, reviver] : 可选参数,可以是一个回调方法。
返回值是一个 JSONObject

JSON 解析实例

我们得到的数据如下:
'{"domain" : "sojson.com","author":"soso"}'
外面被引号包裹起来了,证明它就是个字符串,而不是JSON对象,那么我们要转换,这个时候
JSON.parse()
 就可以派上用场了。
var json = JSON.parse('{"domain" : "sojson.com","author":"soso"}');
如果抛出语法错误(Uncaught SyntaxError),正确会返回一个JSONObject,我们来输出一把,获取“domain”。
var json = JSON.parse('{"domain" : "sojson.com","author":"soso"}');
alert("json.domain = " + json.domain);
//alert(json['domain']);//或者这样也可以

JSON.parse() 浏览器支持问题

Firefox 3.5 + (目前已经50+版本了)
Internet Explorer 8 +(这个...)
Chrome(一直支持)
Opera 10 +
Safari 4 +
8、
JSON.stringify()
是Javascript中一个常用的内置 JSON 转换方法,
JSON.stringify()
可以把JSONObject 转化为 JSON 规则的字符串转换为,
JSON.stringify()
很方便,并且几乎支持所有浏览器。

JSON.stringify() 语法

JSON.stringify(value[, replacer[, space]])

JSON.stringify() 参数说明

参数参数说明备注
value将要序列化成 一个JSON 字符串的值。必选
replacer如果是一个function,那么每个序列化成JSON的value都会经过这个function,如果是一个Array,那么序列化后的JSON字符串中的Key在这个数组中才会加入到返回的JSON 字符串中去。可选
space用于美化JSON字符串,如果是一个Number类型,代表的就是多少个空格。如果是0或者小于0,那么就是没有空格(和不填此项没有区别),如果是字符串,那么直接填充。可选

JSON.stringify() 返回值说明

返回值是一个 JSON字符串,如:
"{"domain":"sojson.com"}"

JSON.stringify() JSON To String

测试样例如下:
var json = {"domain" : "sojson.com","author":"soso"}
它就是一个正常的JSON对象,我们需要把它转换成字符串,这个时候
JSON.stringify()
 就可以派上用场了。
var json = {"domain" : "sojson.com","author":"soso"}
alert(JSON.stringify(json));
其实它外层是有一对双引号包裹起来的。也就是实际是这样的"{"domain" : "sojson.com","author":"soso"}"。

JSON.stringify() replacer参数(1)

replacer参数可以是function,也可以是Array,如果是function,他接收的参数有2个,第一个是Key,第二个是Value。replacer function返回值说明:如果返回一个 Number, 转换成相应的字符串被添加入JSON字符串。
如果返回一个 String, 该字符串作为属性值被添加入JSON。
如果返回一个 Boolean, "true" 或者 "false"被作为属性值被添加入JSON字符串。
如果返回undefined,该属性值不会在JSON字符串中输出。
var json = {"domain" : "sojson.com","author":"soso"}
json = JSON.stringify(json, function(key,value){
if(key == "domain"){
return undefined;//踢出domain
};
return value;
});

JSON.stringify() replacer参数(2)

如参数replacer是一个数组,序列化结果集的Key只输出命中的,miss的属性过滤。replacer Array参数:
var json = {"domain" : "sojson.com","author":"soso"}
json = JSON.stringify(json, ['author']);
alert("JSON = " + json);//结果只留下了命中Key的元素组合。

JSON.stringify() space 参数(1) / JSON 格式化

space参数前面也说了,是用来美化输JSON的。space 每个元素前面都间隔10个空格:
var json = {"domain" : "sojson.com","author":"soso"}
alert(JSON.stringify(json,null,10));

space 也可以用‘tab’来定制空格美化输出,采用“\t”即可,如:
JSON.stringify({"domain" : "sojson.com","author":"soso"},null,'\t')

JSON.stringify() space 参数(2)

space 增加固定的字符串。
var json = {"domain" : "sojson.com","author":"soso"}
alert(JSON.stringify(json,null,"我是sojson"));

JSON.stringify() 其他常用展示

JSON.stringify({});                     // '{}'
JSON.stringify(true); // 'true'
JSON.stringify("sojson"); // '"sojson"'
JSON.stringify([1, "false", false]); // '[1,"false",false]'
JSON.stringify({ abc: 5 }); // '{"abc":5}'
JSON.stringify({x: 5, y: 6}); // "{"x":5,"y":6}"
 
JSON.stringify([new Number(1), new String("false"), new Boolean(false)]);// '[1,"false",false]'
 
JSON.stringify({x: undefined, y: Object, z: Symbol("")}); // '{}'
 
JSON.stringify([undefined, Object, Symbol("")]); // '[null,null,null]'
 
JSON.stringify({[Symbol("sojson")]: "sojson"}); // '{}'
 
JSON.stringify({[Symbol.for("sojson")]: "sojson"}, [Symbol.for("sojson")]); // '{}'

JSON.stringify() 浏览器支持问题

Firefox 3.5 + (目前已经50+版本了)
Internet Explorer 8 +(这个...)
Chrome(一直支持)
Opera 10 +
Safari 4 +
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: