JSON

深入学习理解json

字号+ 作者:H5之家 来源:H5之家 2017-04-13 13:00 我要评论( )

json(javascript object notation)全称是javascript对象表示法,它是一种数据交换的文本格式,而不是一种编程语言,用于读取结构化数据。 语法规则 JSONl可以表示一下三种类型的值, 1:简单值、 简单值使用与javascript相同的语法,可以在JSON中表示字符串

  json(javascript object notation)全称是javascript对象表示法,它是一种数据交换的文本格式,而不是一种编程语言,用于读取结构化数据。

语法规则

JSONl可以表示一下三种类型的值,

1:简单值、

  简单值使用与javascript相同的语法,可以在JSON中表示字符串、数值、布尔值和null

  字符串必须使用双引号表示,不能使用单引号。数值必须以十进制表示,且不能使用NaN和Infinity

  JSON不支持javascript中的特殊值undefined,
  

//不合格的简单值 +

对象

对象作为一种发杂的数据类型,表示的是一组有序的键值对,每个键值对中的值可以是简单值,也可以是复杂数据类型的值。

与js对象字面量相比,JSON有3个不同的地方,

1:json没有变量的概念
2:在json中对象的键名必须放在双引号里面,
3:json不是js语句,所以没有末尾的分号,
4:同一个对象中不应该出现两个同名属性

{ "name":"huochai", "age":29, "school":{ "name":"diankeyuan", "location":"beijing" } }//不合格的对象 { name: "张三", 'age': 32 }//属性名必须使用双引号 {};//不需要末尾的分号 { "birthday": new Date('Fri, 26 Aug 2011 07:13:10 GMT'), .name; } } // 不能使用函数和日期对象

数组

  数组也是一种复杂数据类型,表示一组有序的值的列表,可以通过数值索引来访问其中的值。数组的值也可以是任意类型——简单值、对象或数组

  JSON数组也没有变量和分号,把数组和对象结合起来,可以构成更复杂的数据集合

  [注意]数组或对象最后一个成员的后面,不能加逗号

json对象

json之所以流行,是因为可以把json数据结构转化为有用的js对象。
EMACscript5对json进行了规范,定义了全局json;

json有两个方法。stringify()和parse();这两个方法分别JS对象序列化为json字符串和把json字符串解析为原生js的值。

stingify()

JSON.stringify()用于将一个值转化为字符串,该字符串符合JSON格式,并且是可以被JSON.parse()还原。

 默认情况下,JSON.stringify()输出的JSON字符串不包括任何空格字符或缩进。

var jsonObj = { "title":"javascript", "group":{ "name":"jia", } }; {}} .stringify(.stringify({}) .stringify({ name: (((()) //""2016-09-20T02:26:38.294Z""

  如果对象的成员是undefined或函数,这个成员会被省略;
  如果数组的成员是undefined或函数,则这些值被转成null;

JSON.stringify({ a: function(){}, b: undefined, c: [ function(){}, undefined ] }); // "{"c":[null,null]}"

 如果对象成员或数组成员中出现NaN或Infinity,则这些值被转换成null

console.log(JSON.stringify({ a: NaN, b: Infinity, c: [ NaN,Infinity] })); //{"a":null,"b":null,"c":[null,null]}

  JSON.stringify()方法会忽略对象的不可遍历属性;

var obj = {}; Object.defineProperties(obj, { 'foo': { value: 1, enumerable: true }, 'bar': { value: 2, enumerable: false } }); JSON.stringify(obj); // {"foo":1}

参数

JSON.stringify();除了要序列js对象外,还可以接受两个参数,这两个参数用于指定不同的方式序列化js对象,第一个参数是过滤器,可以是一个数组,也可以是一个函数,第二个参数是一个选项,表示是否在json字符串中保留缩进,

数组过滤

当stringify()方法的第二个参数是数组时,相当于实现一个过滤器的功能;

过滤器之对对象的第一层属性有效,

var jsonObj = { "title":"javascript", "group":{ "a":1 } }; //{"group":{"a":1}} console.log(JSON.stringify(jsonObj,["group","a"]))var jsonObj = { "title":"javascript", "group":{ "a":1 } }; //{"group":{"a":1}} console{"title":"javascript","group":{"a":1}}

过滤器对数组无效

var jsonObj =[1,2]; JSON.stringify(jsonObj,["0"])//"[1,2]"

函数参数

stringify()的第二个参数可以是一个函数,传入的函数接收两个参数,属性名歌属性值。

JSON.stringify({a:1,b:2}, function(key, value){ if (typeof value === "number") { value = 2 * value; } return value; }) //"{"a":2,"b":4}"

属性名只能是字符串,而在值在并非键值对结构时,键名可以是空字符串

  下面代码中,对象o一共会被f函数处理三次。第一次键名为空,键值是整个对象o;第二次键名为a,键值是{b:1};第三次键名为b,键值为1。

JSON.stringify({a: {b: 1}}, function (key, value) { console.log("["+ key +"]:" + value); return value; })

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • 一文读懂机器学习、数据科学、人工智能、深度学习和统计学之间的

    一文读懂机器学习、数据科学、人工智能、深度学习和统计学之间的

    2017-04-06 16:00

  • Linux目录命令学习

    Linux目录命令学习

    2017-04-06 08:00

  • 别样JAVA学习(一)基础知识

    别样JAVA学习(一)基础知识

    2017-04-03 10:04

  • Angular工具首法学习

    Angular工具首法学习

    2017-03-20 16:02

网友点评
>