资讯专栏INFORMATION COLUMN

JSON

sourcenode / 887人阅读

摘要:可以表示三种类型的值,简单值对象,数组。使用表示对象中的对象中的对象在中表示对象时必须给对象的属性添加双引号。此外,没有声明变量,其次,末尾没有分号。表示数组中数组采用的是中数组的字面量形式。如果还原函数返回则表示要在结果中删除相应的键。

title: JSON
date: 2016-11-8
tags: JavaScript

0x00 JSON

JSON(JavaScript Object Notation, JavaScript对象表示法)。

JSON 利用了 JS 中的一些模式来表示结构化数据。

JSON 是一种数据格式,而不编程语言。

JSON 可以表示三种类型的值,简单值,对象数组

对于简单值,在JS中,JSON 可以表示,字符串,数值,布尔值,null,但是不支持JS 中的特殊值 undefined。

JSON 不支持变量,函数或对象实例。

使用 JSON 表示对象
//JSON 中的对象
{   "name":"Jack",
    "age":29,
    "school":{
        "name":"huaxin school",
        "location":"china"
    }
}

//JS 中的对象
var object = {
    "name":"Macil",
    "age":29
};

在 JSON 中表示对象时必须给对象的属性添加双引号。此外,没有声明变量,其次,末尾没有分号。

JSON 表示数组

JSON 中数组采用的是 JS 中数组的字面量形式。

[24,"hello",false]

同样的,JSON 中数组也没有变量好分号。

把数字和对象结合起来,便可以构成复杂的数据集合。

0x01 解析和序列化

JSON 数据结构可以被解析为有用的 JS 对象,这也是 JSON 成为 Web 服务开发中交互数据的事实标准的重要原因。

JSON 对象有两个方法: stringify()parse()

stringify():把 JS 对象序列化为 JSON 字符串
parse():把 JSON 字符串解析为原生的 JS 值

JSON.stringify()

JSON.stringify() 除了要序列化的 JS 对象外,还可以接受另外两个参数。需要添加的第二个参数是过滤器,可以是数组(数组过滤器)或者函数(函数过滤器)。第三个参数表示,是否在 JSON 字符串中保留缩进。

数组过滤器

如果过滤器参数是数组,那么 JSON.stringify() 的结果中将只包含数组中列出的属性。

var books = {
    "title":"挪威的森林",
    "authors":["村上春树"],
    "edition":3,
    "year":2011
};

var jsonText = JSON.stringify(books,["title","edition"]);
console.log(jsonText);
//{"title":"挪威的森林","edition":3}
函数过滤器

函数过滤器中的函数接受两参数:属性名属性值,而属性名只能是字符串。

函数过滤器会根据传入的键来决定返回的结果。但若是函数返回了 undefined 那么相应的属性会被忽略。

var books = {
   "title":"挪威的森林",
   "authors":["村上春树","芥川龙之介","松下幸之助","太宰治"],
   "edition":3,
   "year":2011
};

var jsonText = JSON.stringify(books,function(key,value){
   switch(key){
       case "authors":
           return value.join(",");
       case "year":
           return 50000;
       case "edition":
           return undefined;
       default :
           return value;
   }
});
console.log(jsonText);
//{"title":"挪威的森林","authors":"村上春树,芥川龙之介,松下幸之助,太宰治","year":50000}
字符缩进

JSON.stringify() 的第上参数可以为数字或者任意字符。分别表示要缩进的空格数和用来表示的缩进字符串(不再使用空格)

var jsonText = JSON.stringify(book,null,"---");
JSON.parse()

JSON.stringigy() 方法对应,JSON.parse() 可以接受一个函数作为还原函数(reviver),它也同样接收两参数,一个键和一个值。

如果还原函数返回 undefined 则表示要在结果中删除相应的键。

在将日期对象转换为 Date 对象时,便经常使用到还原函数了。

var books = {
    "title":"挪威的森林",
    "authors":["村上春树","芥川龙之介","松下幸之助","太宰治"],
    "edition":3,
    "year":2011,
    "releaseDate":new Date(2016,11,8)
};

var jsonText = JSON.stringify(books,function(key,value){
    switch(key){
        case "authors":
            return value.join(",");
        case "year":
            return 50000;
        case "edition":
            return undefined;
        default :
            return value;
    }
});

var bookCopy = JSON.parse(jsonText,function(key,value){
    if (key == "releaseDate"){
        return new Date(value);
    } else {
        return value;
    }
})

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/86531.html

相关文章

  • #干货盘点#JSON-C API

    摘要:什么是对象简谱是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。 什么是Json​ Json(JavaScript Object Notation,JS 对象简谱)是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。一些合法的Json实例:键值对:(可以没有键只有值)键 ...

    codeGoogle 评论0 收藏0
  • Vultr机房测评 - Vultr新加坡Singapore机房综合速度和线路去程回程测试

    摘要:在这里今天老蒋在针对商家新加坡机房进行测评。关于云服务器相关的文章优惠码优惠码整理专题每月更新最新优惠活动新用户最高送美元韩国机房机房测评韩国首尔机房综合速度和线路去程回程测试新人教程新人系列教程新注册账户且用优惠码享受赠送余额老蒋在昨天的文章中有提到Vultr商家韩国首尔机房,虽然离我们距离比较近,但是人家设立的机器并非针对我们大陆用户的,而是除了我们之外的其他亚洲地区的速度是比较好的,比...

    leejan97 评论0 收藏0
  • 经典VPS主机新增日本大阪软银和荷兰联通AS9929机房线路速度测试

    摘要:最近一段时间,经典主机新增日本大阪软银机房,国内的值相当不错,特别适合联通用户访问使用。日本经典主机电信线路日本经典主机电信线路这是经典的日本大阪软银机房电信回程线路。经典瓦工的VPS主机现在已经完全走了高端领域了,CN2 GIA的VPS主机现在连月付都没有了,只有季付了,平均下来月付必须是十几美元才可以,价格实在是太贵了。不过,好在经典VPS主机的线路质量不错,而且机房的带宽给得足,用于建...

    番茄西红柿 评论0 收藏2637

发表评论

0条评论

最新活动
阅读需要支付1元查看
<