JSON数据格式

  • JSON 的由来
  • JSON 的基本语法
  • 解析与序列化

JSON 的由来

在目前的开发中,JSON是一种非常重要的数据格式,它并不是编程语言,而是一种可以在服务器和客户端之间传输的数据格式
JSON的全称是JavaScript Object Notation (JavaScript对象符号)
JSON是由Douglas Crockforc 构想和设计的一种轻量级数据交换格式,算是JavaScript的一个子集
很多编程语言都实现了将JSON转为对应模型的方式

其他的传输格式:
XML:在早期的网络传输中主要是使用XML来进行数据交换的,但是这种格式在解析、传输等各方面都弱于JSON,所以目前已经很少在被使用了
Protobuf:另外一个在网络传输中目前已经越来越多使用的传输格式是protobuf,但是直到2021年的3.x版本才支持JavaScript,所以在前端使用的比较少;

目前JSON被使用的场景也越来越多:
网络数据的传输JSON数据;
项目的某些配置文件;
非关系型数据库(NoSQL)将json作为存储格式

JSON 的基本语法

JSON的最外层支持三种类型的值:
简单值:数字(Number)、字符串(String ,不支持单引号)、布尔类型(Boolean)、null类型;
对象值:由key、value组成,key是字符串类型,并且必须添加双引号,值可以是简单值、对象值、数组值;
数组值:数组的值可以是简单值、对象值、数组值;

JSON不支持变量、函数或对象实例,是一种表示结构化数据的格式。
简单值

JSON数据形式:

5    // 数值
"Hello JavaScript"    // 字符串
null

与JavaScript不同,JSON中的对象要求给属性加上引号:

{"name": "JS人柱力";"age": 100
}// 属性的值也可以是复杂类型
{"school": {"name": "hafo", "location": "Harbin"}
}

数组

JSON表示数组:

[100, "JS人柱力", true]

JSON数组没有变量和分号。

把数组和对象结合,可以构造复杂的数据集合:

[{"title":"js","authors":["张三"],edition: 2},{"title":"MySQL从删库到跑路","authors":["李四"],edition: 3},{"title":"Dreamweaver从安装到卸载","authors":["王五"],edition: 4}
]

解析与序列化

JSON对象

JSON对象有两个方法:

stringfy():把JavaScript对象序列化为JSON字符串
parse():。把JSON字符串解析为原生JavaScript值

示例:

var book = {"title":"Java从入门到放弃","authors":["张三"],edition: 2
};
var jsonText = JSON.stringify(book);
alert(jsonText);    // {"title":"Java从入门到放弃","authors":["张三"],"edition":2}

上面的例子将一个JavaScript对象序列化为一个JSON字符串。默认情况下,JSON.stringify()不包含任何字符或缩进。

将JSON字符串直接传递个JSON.parse()可以得到相应的JavaScript值。

var newBook = JSON.parse(jsonText);

book与newBook具有相同的属性,但是彼此是相互独立的。
序列化选项

JSON.stringify()还可以接收两个参数:

第一个参数:过滤器,一个数组或一个函数。
第二个参数:一个选项,表示是否在JSON字符串中保留缩进

过滤结果

如果参数是数组,JSON.stringify()的结果只包含数组中列出的属性。

var book = {"title":"Java从入门到放弃","authors":["张三"],edition: 2
};
var jsonText = JSON.stringify(book, ["title", "authors"]);
console.log(jsonText);  // {"title":"Java从入门到放弃","authors":["张三"]}

如果参数是函数,传入的函数接收两个参数,属性名和属性值,根据属性名可以知道如何处理属性。属性名是字符串,属性值并非键值对的值,键名可以是空字符串。

返回的值是相应键的值,如果函数返回undefined,那么该属性就会被忽略。

var book = {"title":"Java programming","authors":["张三","李四"],edition: 2
};
var jsonText = JSON.stringify(book, function (key, value) {switch (key) {case "authors":return value.join("-");        // 用“-”分割数组case "edition":return undefined;default :return value;}
});
console.log(jsonText);    // {"title":"Java programming","authors":"张三-李四"}

字符串缩进

JSON.stringify()的第三个参数用于控制结果中的缩进和空白符。如果是数值,表示每格缩进的空格数。

var book = {"title":"Java programming","authors":["JS人柱力",],edition: 2
};
var jsonText = JSON.stringify(book, null, 4);
console.log(jsonText);

如果是字符串,这个字符串将用作JSON字符串的缩进符

var book = {"title":"Java programming","authors":["JS人柱力",],edition: 2
};
var jsonText = JSON.stringify(book, null, "__");
console.log(jsonText);【显示结果】:
{__"title": "Java programming",
__"authors": [
____"JS人柱力"
__],
__"edition": 2
}

缩进字符串最多只能包含10个字符。
toJSON()方法

JSON.stringify()并不能满足所有对象进行序列化的需求。可以给对象定义toJSON()方法,返回其自身的JSON数据格式。

示例:

var book = {"title":"Java programming","authors":["JS人柱力",],edition: 2,toJSON: function () {return "==="+this.title+"===";}
};
var jsonText = JSON.stringify(book);
console.log(jsonText);    // "===Java programming==="

解析选项

JSON.parse()方法也可以接收另一个参数,该参数是一个函数,将在每个键值对上调用。如果返回undefined,表示从结果中删除相应的键,如果返回其他值,则将该值插入到结果中。

var book = {"title":"Java programming","authors":["JS人柱力",],edition: 2,year: 2022,releaseDate: new Date(2022, 11, 1)
};
var jsonText = JSON.stringify(book);var newBook = JSON.parse(jsonText, function (key, value) {if (key == "releaseDate") {return new Date(value);} else {return value;}
});
console.log(newBook.releaseDate.getFullYear());    // 2022

详解JSON数据格式相关推荐

  1. 图像和流媒体 -- 详解YUV数据格式

    如需转载请注明出处:https://blog.csdn.net/qq_29350001/article/details/78283369 我们在讲 FFmpeg 系列的时候,有提到 YUV 的.其中包 ...

  2. urlencoded格式详解 JSON格式详解

    一.表单格式详解 [urlencoded格式]:又叫form格式,或者是x-www-form-urlencoded格式. 口诀:表单格式是由键值对组成.键和值之间用=.多个键值对之间用&.例如 ...

  3. python内置json模块的作用_python详解json模块

    我们在做工作中经常会使用到json模块,今天就简单介绍下json模块 什么是json JSON ,全称为JavaScript Object Notation, 也就是JavaScript 对象标记,它 ...

  4. python json方法详解_python详解json模块

    我们在做工作中经常会使用到json模块,今天就简单介绍下json模块 什么是json JSON ,全称为JavaScript Object Notation, 也就是JavaScript 对象标记,它 ...

  5. 【转】图文详解YUV420数据格式

    YUV格式有两大类:planar和packed. 对于planar的YUV格式,先连续存储所有像素点的Y,紧接着存储所有像素点的U,随后是所有像素点的V. 对于packed的YUV格式,每个像素点的Y ...

  6. 【JavaScript】详解JSON

    目录结构: contents structure [+] 什么是JSON JSON和XML的比较 相同点 不同点 JSON语法 如何解析JSON文本 eval()方法 JSON.parse()方法 J ...

  7. 详解NMEA数据格式

    NMEA是"National Marine Electronics Association"(国际海洋电子协会)缩写,同时也是数据传输标准工业协会,在这里,实际上应为NMEA 01 ...

  8. json-lib使用详解——json小工具

    json-lib 一.json-lib是什么? apache提供的json-lib小工具,它可以方便的使用Java语言来创建JSON字符串.也可以把JavaBean转换成JSON字符串. 二.核心ja ...

  9. 图文详解YUV420数据格式YUV444数据格式YUV422数据格式

    转:https://www.cnblogs.com/azraelly/archive/2013/01/01/2841269.html YUV格式有两大类:planar和packed. 对于planar ...

最新文章

  1. android sqlite SQLiteDatabase 操作大全 不看后悔!必收藏!看后精通SQLITE (第二部分)...
  2. AGG第七课 内存分配策略
  3. 多元经验模态分解_环境激励桥梁模态参数识别—环境激励模态参数识别概述
  4. js库prototype中的$()
  5. 85JS原生:数组4种去重方法
  6. 227 Puzzle
  7. 关于esp32的省电模式的WiFi连接
  8. 23种经典设计模式UML类图汇总
  9. STM8S 低功耗模式
  10. 跳过Android6.0+权限的方法
  11. 最方便简单的经纬度查询方法
  12. 详解电商订单逻辑流程图
  13. 贪吃蛇html网页小游戏,JavaScript贪吃蛇,网页在线版贪食蛇游戏
  14. 计算机实验三—CPT
  15. 产业分析:工业机器人市场研究
  16. 北师大1903计算机在线答案,[南开大学(本部)]20秋学期(1709、1803、1809、1903、1909、2003、2009 )《程序设计基础(下)》在线作业-2...
  17. 基于微信小程序Map标签及高德地图开源方法实现路径导航
  18. Vue对单独的页面的body样式设置
  19. 给查询出的SQL语句加序号
  20. 如何在Microsoft Edge中更改主页

热门文章

  1. CentOS7-命令-立即关机命令(shutdown -h now)
  2. L1-033 出生年 (15 分)(简单解法)
  3. linux把目录下的文件设置属性为rx,Linux常用命令(六)管理目录和文件属性
  4. frameset标签
  5. i510200h和i79750h哪个好
  6. socket是并发安全的吗
  7. netty数据流堆外内存排查
  8. 基于RNN(循环神经网络)的北京雾霾天气指数的预测(keras实现RNN,LSTM神经网络算法)
  9. 迄今为止见过最详细的零拷贝技术讲解
  10. vue.js+vux项目总结