• [ JavaScript ] JSON方法


    JSON

    JSON(JavaScript Object Notation)是表示值和对象的通用格式。

    最初它是为 JavaScript 而创建的,但许多其他编程语言也有用于处理它的库。因此,当客户端使用 JavaScript 而服务器端是使用 Ruby/PHP/Java 等语言编写的时,使用 JSON 可以很容易地进行数据交换。

    JavaScript 提供了如下方法:

    • JSON.stringify 将对象转换为 JSON。
    • JSON.parse 将 JSON 转换回对象。

    请注意,JSON 编码的对象与对象字面量有几个重要的区别:

    • 字符串使用双引号。JSON 中没有单引号或反引号。所以 'John' 被转换为 "John"
    • 对象属性名称也是双引号的。这是强制性的。所以 age:30 被转换成 "age":30

    此外,JSON 不支持注释。向 JSON 添加注释无效。

    还有另一种名为 JSON5 的格式,它允许未加引号的键,也允许注释等。但这是一个独立的库,不在语言的规范中。

    常规的 JSON 格式严格,并不是因为它的开发者很懒,而是为了实现简单,可靠且快速地实现解析算法。

    JSON.stringify 的完整语法是:

    let json = JSON.stringify(value[, replacer, space])
    
    • 1
    • value

      要编码的值。

    • replacer

      要编码的属性数组或映射函数 function(key, value)

    • space

      用于格式化的空格数量

    大部分情况,JSON.stringify 仅与第一个参数一起使用。但是,如果我们需要微调替换过程,比如过滤掉循环引用,我们可以使用 JSON.stringify 的第二个参数。

    如果我们传递一个属性数组给它,那么只有这些属性会被编码。

    例如,在这里我们 JSON.stringify 一个 student 对象:

    let student = {
      name: 'John',
      age: 30,
      isAdmin: false,
      courses: ['html', 'css', 'js'],
      spouse: null
    };
    
    // 方法 JSON.stringify(student) 接收对象并将其转换为字符串
    let json = JSON.stringify(student);
    
    alert(typeof json); // we've got a string!
    
    alert(json);
    /* JSON 编码的对象:
    {
      "name": "John",
      "age": 30,
      "isAdmin": false,
      "courses": ["html", "css", "js"],
      "spouse": null
    }
    */
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    排除反向引用

    在简单循环引用的情况下,我们可以通过名称排除序列化中违规的属性。

    但是,有时我们不能只使用名称,因为它既可能在循环引用中也可能在常规属性中使用。因此,我们可以通过属性值来检查属性。

    编写 replacer 函数,移除引用 meetup 的属性,并将其他所有属性序列化:

    let room = {
      number: 23
    };
    
    let meetup = {
      title: "Conference",
      occupiedBy: [{name: "John"}, {name: "Alice"}],
      place: room
    };
    
    room.occupiedBy = meetup;
    meetup.self = meetup;
    
    alert( JSON.stringify(meetup, function replacer(key, value) {
      // 需要判断 key=="" 以排除第一个调用时 value 是 meetup 的情况
      return (key != "" && value == meetup) ? undefined : value;
    }));
    
    /*
    {
      "title":"Conference",
      "occupiedBy":[{"name":"John"},{"name":"Alice"}],
      "place":{"number":23}
    }
    */
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    总结

    • JSON 是一种数据格式,具有自己的独立标准和大多数编程语言的库。
    • JSON 支持 object,array,string,number,boolean 和 null
    • JavaScript 提供序列化(serialize)成 JSON 的方法 JSON.stringify 和解析 JSON 的方法 JSON.parse
    • 这两种方法都支持用于智能读/写的转换函数。
    • 如果一个对象具有 toJSON,那么它会被 JSON.stringify 调用。
  • 相关阅读:
    为季前卡牌游戏 MotoGP™ Ignition Champions 做好准备!
    K8S:pod资源限制及探针
    MFC转Winform&&C++转C#
    C++(拷贝构造与赋值重载)
    从零开始搭建自己的cli脚手架
    HarmonyOS—编译构建概述
    中国人民大学与加拿大女王大学金融硕士——热爱会穿越时间,埋在心底的读研梦也是
    [附源码]java毕业设计咖啡销售管理系统-
    牛客刷题系列之进阶版(搜索旋转排序数组,链表内指定区间反转)
    qt6 多媒体开发代码分析(四、视频播放)
  • 原文地址:https://blog.csdn.net/CharlynYanyan/article/details/126937589