JavaScript JSON

JSON概述

JSON:JavaScript Object Notation(JavaScript 对象标记法),它是一种存储和交换数据的语法。

当数据在浏览器与服务器之间进行交换时,这些数据只能是文本,JSON 属于文本并且我们能够把任何 JavaScript 对象转换为 JSON,然后将 JSON 发送到服务器。我们也能把从服务器接收到的任何 JSON 转换为 JavaScript 对象。以这样的方式,我们能够把数据作为 JavaScript 对象来处理,无需复杂的解析和转译。

JSON语法

在json中,每一个数据项,都是由一个键值对(或者说是名值对)组成的,但是键必须是字符串,且由双引号包围,而值必须是以下数据类型之一:

  • 字符串(在 JSON 中,字符串值必须由双引号编写)
  • 数字
  • 对象(JSON 对象)
  • 数组
  • 布尔
  • null

JSON 的值不可以是以下数据类型之一:

  • 函数
  • 日期
  • undefined

因为 JSON 语法由 JavaScript 对象标记法衍生而来,所以很少需要其它额外的软件来处理 JavaScript 中的 JSON。

通过 JavaScript,创建对象并向其分配数据,就像这样:

var person = {"name": "zhangsan", "age": 62, "city": "BeiJing"};
console.log(person);


JSON数据类型

JSON 字符串

JSON 中的字符串必须用双引号包围。

{"name": "John"}

JSON 数字

JSON 中的数字必须是整数或浮点数。

{"age": 30}

JSON 对象

JSON 中的值可以是对象,JSON 中作为值的对象必须遵守与 JSON 对象相同的规则。

{
    "employee": {"name": "Bill Gates", "age": 62, "city": "Seattle"}
}

JSON 数组

JSON 中的值可以是数组。

{
    "employees": ["Bill", "Steve", "David"]
}

JSON 布尔

JSON 中的值可以是 true/false。

{"sale": true}


JSON字符串转JS对象

JSON.parse():可以将以JSON字符串转换为JS对象,它需要一个JSON字符串作为参数,会将该字符串转换为JS对象并返回

var jsonStr = '{"name":"孙悟空","age":18,"gender":"男"}';
var obj = JSON.parse(jsonStr);
console.log(obj);

JS对象转JSON字符串

JSON.stringify():可以将一个JS对象转换为JSON字符串,需要一个js对象作为参数,会返回一个JSON字符串

var obj = {name: "猪八戒", age: 28, gender: "男"};
var jsonStr = JSON.stringify(obj);
console.log(jsonStr);

JSON VS Protocol Buffers(protobuf)

特性JSONProtocol Buffers (protobuf)
全称JavaScript Object NotationProtocol Buffers
创建者Douglas CrockfordGoogle
数据表示人类可读的文本格式二进制格式
易读性良好,人类可读不易读,需要使用工具进行解析
性能较慢,因为是文本格式,需要解析为二进制格式高效,基于二进制,解析和序列化/反序列化性能极佳
文件大小较大,尤其是包含大量数据时较小,二进制格式,数据压缩效果更好
灵活性高,支持动态结构,可以在运行时决定数据的结构中等,需要预先定义数据结构,但通过字段标签可以实现一定的灵活性
Schema 定义无强制要求,可以没有 schema强制使用 schema 定义 .proto 文件
语言支持原生支持多种语言 (JavaScript, Python, Java 等)通过官方插件支持多种语言 (C++, C#, Java, Python, Go, 等)
自描述性自描述,每个对象可以携带数据结构的信息需要 schema 文件才能理解数据格式
扩展性较好,容易添加新字段,不影响已有数据良好,可通过字段标签确保向后兼容
错误处理较易诊断,错误信息明确难于诊断,错误信息不易读
主要应用Web 应用客户端与服务器的数据交换,配置文件等高性能数据交换、大规模数据传输、网络通信
与语言的耦合度低,语言无关,但通常在 JavaScript 环境中作为默认格式中等,与具体编译器生成的代码格式相关,但有官方插件支持各种语言
使用者广泛用于互联网公司和应用 (如 REST API, 配置文件等)广泛用于 Google 内部系统和要求高效传输的数据交换场景
  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

**K

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值