• JSON 教程


    JavaScript高级程序设计》读书笔记

    语法

    JSON 语法支持表示 3 种类型的值。

    • 简单值:字符串、数值、布尔值和 null 可以在 JSON 中出现,就像在 JavaScript 中一样。特殊值 undefined 不可以。
    • 对象:第一种复杂数据类型,对象表示有序键/值对。每个值可以是简单值,也可以是复杂类型。
    • 数组:第二种复杂数据类型,数组表示可以通过数值索引访问的值的有序列表。数组的值可以是任意类型,包括简单值、对象,甚至其他数组。
    1. {
    2. "title": "Professional JavaScript",
    3. "school": {
    4. "name": "Merrimack College",
    5. "location": "North Andover, MA"
    6. },
    7. "authors": [
    8. "Nicholas C. Zakas",
    9. "Matt Frisbie"
    10. ]
    11. }

    解析与序列化

    • JSON.stringify(text):把一个 JavaScript 对象序列化为一个 JSON 字符串,会输出不包含空格或缩进的 JSON 字符串
    • JSON.parse(jsonText):接受JSON 字符串,转化为js值

    序列化选项

    JSON.stringify()方法除了要序列化的对象,还可以接收两个参数。一个是过滤器,可以是数组或函数;另一个是用于缩进结果JSON字符串的选项。

    1. 过滤结果

    如果是数组:返回包含该数组中列出的对象属性。

    1. let book = {
    2. title: "Professional JavaScript",
    3. authors: [
    4. "Nicholas C. Zakas",
    5. "Matt Frisbie"
    6. ],
    7. edition: 4,
    8. year: 2017
    9. };
    10. JSON.stringify(book, ["title", "edition"]);
    11. // '{"title":"Professional JavaScript","edition":4}'

    如果是函数:提供的函数接收两个参数:属性名( key)和属性值( value)。可以根据这个 key 决定要对相应属性执行什么操作。

    1. JSON.stringify(book, (key, value) => {
    2. switch(key) {
    3. case "authors":
    4. return value.join(",")
    5. case "year":
    6. return 5000;
    7. case "edition":
    8. return undefined;
    9. default:
    10. return value;
    11. }
    12. });
    13. // '{"title":"Professional JavaScript","authors":"Nicholas C. Zakas,Matt Frisbie","year":5000}'

    2. 字符串缩进

    第三个参数控制缩进和空格。

    如果是数值时,表示每一级缩进的空格数。

    JSON.stringify(book, null, 4);

    如果是字符串,那么就不是用空格来缩进而是用该字符串。最多10个字符,超出截断。

    1. JSON.stringify(book, null, "--" );
    2. // '{\n--"title": "Professional JavaScript",\n--"authors": [\n----"Nicholas C. Zakas",\n----"Matt Frisbie"\n--],\n--"edition": 4,\n--"year": 2017\n}'

    3. toJSON() 方法

    自定义JSON 序列化。这个对象会被序列化为简单字符串而非对象。

    1. let book = {
    2. title: "Professional JavaScript",
    3. authors: [
    4. "Nicholas C. Zakas",
    5. "Matt Frisbie"
    6. ],
    7. edition: 4,
    8. year: 2017,
    9. toJSON: function() {
    10. return this.title;
    11. }
    12. };
    13. JSON.stringify(book);
    14. // '"Professional JavaScript"'

    执行JSON.stringify() 如下步骤:

    1. 如果可以获取实际的值,则调用 toJSON()方法获取实际的值,否则使用默认的序列化。
    2. 如果提供了第二个参数,则应用过滤。传入过滤函数的值就是第(1)步返回的值。
    3. 第(2)步返回的每个值都会相应地进行序列化。
    4. 如果提供了第三个参数,则相应地进行缩进。

    解析选项

    JSON.parse()方法也可以接收一个额外的参数,这个函数会针对每个键/值对都调用一次。也接收两个参数,属性名( key)和属性值( value),另外也需要返回值。如果还原函数返回 undefined,则结果中就会删除相应的键。

    1. let book = {
    2. title: "Professional JavaScript",
    3. authors: [
    4. "Nicholas C. Zakas",
    5. "Matt Frisbie"
    6. ],
    7. edition: 4,
    8. year: 2017,
    9. releaseDate: new Date(2017, 11, 1)
    10. };
    11. let jsonText = JSON.stringify(book);
    12. JSON.parse(jsonText,(key, value) => key == "releaseDate" ? new Date(value) : value);
  • 相关阅读:
    天然气销售企业人工智能技术应用研究
    css实现贴合滚动
    CSDN里的常用网址(2)
    利用h5py加速数据集读取
    (2022牛客多校五)B-Watches(二分)
    使用mmdetection做实例分割
    光源基础(1)——常见光源性能比对和好图像评价指标
    C. Word Game
    63 x的平方根
    机器人期刊:Science Robotics and IEEE Transactions
  • 原文地址:https://blog.csdn.net/qq_41538165/article/details/126646294