JSON中key动态设置及JSON.parse和JSON.stringify()的区别

JSON中key动态设置指的是在JavaScript中向JSON对象动态添加属性名(key),这样的JSON对象在另一个需要使用这些属性的函数或者方法中外部作用域仍然可以进行访问。但在正常情况下,我们无法使用字符串拼接的方式来动态设置JSON中的key,这时候就需要借助ES6中的计算属性名(Computed Property Names)来实现。

计算属性名的语法是在对象属性名的方括号中使用一个表达式来为对象动态添加属性名。例如:

let dynamicKey = 'key';
let obj = {
  [dynamicKey]: 'value'
};

console.log(obj); // { key: "value" }

以上代码中,dynamicKey变量是一个动态的属性名,使用方括号包裹起来,并且动态设置了键名为dynamicKey变量的值为字符串"value"的属性。执行console.log(obj)可以看到obj动态添加了一个属性,它的key是动态的,为dynamicKey的变量值,value是固定的字符串"value"。

JSON.parse和JSON.stringify()的作用是可以将JavaScript对象转化为JSON字符串字符串和将JSON字符串转化为JavaScript对象。JSON.parse方法将JSON字符串解析为JavaScript对象,而JSON.stringify方法则将JavaScript对象转换成JSON字符串。

在使用这两个方法时需要注意以下几点:

  1. JSON.parse()方法会将JSON字符串转换成JavaScript对象,但是字符串必须是严格规范的JSON格式,否则会抛出错误。
  2. JSON.stringify()方法将JavaScript对象转换成JSON格式的字符串。该方法可以接受一个可选参数replacer,用于转换特定的属性;还有一个可选参数space,用于设置输出格式的缩进大小。
  3. JSON.parse()方法解析Json字符串得到的是JavaScript对象,而不是真正的JSON对象。
  4. JSON.stringify()方法只会返回包含数据的JSON字符串,而不包含JavaScript中的行为函数。

以下是示例代码:

完成一个artList(艺术家列表)JSON对象,其结构如下:

{
   "data": {
      "artists": [
         {
            "id": "ar1",
            "name": "Vincent van Gogh",
            "date_of_birth": "1853-03-30"
         },
         {
            "id": "ar2",
            "name": "Pablo Picasso",
            "date_of_birth": "1881-10-25"
         },
         {
            "id": "ar3",
            "name": "Claude Monet",
            "date_of_birth": "1840-11-14"
         }
      ]
   }
}

使用计算属性名动态设置一个新的艺术家信息,然后将新添加的JSON对象转化为JSON字符串。

let artistName = 'Salvador Dali';
let dateOfBirth = '1904-05-11';

let artList = {
  "data": {
    "artists": [
      {
        "id": "ar1",
        "name": "Vincent van Gogh",
        "date_of_birth": "1853-03-30"
      },
      {
        "id": "ar2",
        "name": "Pablo Picasso",
        "date_of_birth": "1881-10-25"
      },
      {
        "id": "ar3",
        "name": "Claude Monet",
        "date_of_birth": "1840-11-14"
      },
      {[`ar4`]:{
            "id": "ar4",
            "name": artistName,
            "date_of_birth": dateOfBirth
      }}
    ]
  }
};

let artListString = JSON.stringify(artList);
console.log(artListString);

以上代码中,使用计算属性名方式动态添加了一个名为ar4的新艺术家,然后将artList对象转化为字符串输出,会得到以下输出结果:

{
  "data":{
    "artists":[
      {
        "id":"ar1",
        "name":"Vincent van Gogh",
        "date_of_birth":"1853-03-30"
      },
      {
        "id":"ar2",
        "name":"Pablo Picasso",
        "date_of_birth":"1881-10-25"
      },
      {
        "id":"ar3",
        "name":"Claude Monet",
        "date_of_birth":"1840-11-14"
      },
      {
        "ar4":{
          "id":"ar4",
          "name":"Salvador Dali",
          "date_of_birth":"1904-05-11"
        }
      }
    ]
  }
}

以下是第二个示例代码:

将一个JSON字符串使用JSON.parse方法转换为JavaScript对象,并使用计算属性名将一个数据重新添加进组成新的JSON对象。

let jsonString = `{
                    "name": "Jason Bourne",
                    "birth": "1970-07-21",
                    "nationality": "American",
                    "profession": "Spy",
                    "alias": "Delta One"
                  }`;

let agentInfo = JSON.parse(jsonString);

let moreInfo = {
  "location": "Hong Kong",
  "active": true
};

agentInfo = {
  ...agentInfo,
  [Object.keys(moreInfo)[0]]: moreInfo.location,
  [Object.keys(moreInfo)[1]]: moreInfo.active
};

let outputString = JSON.stringify(agentInfo);

console.log(outputString);

以上代码中,首先使用JSON.parse方法将jsonString解析为一个JavaScript对象(agentInfo),然后使用计算属性名动态添加了包含新信息的属性(location和active),并将其拼接到agentInfo对象中生成新的JSON对象。最后使用JSON.stringify方法将新的JSON对象转化为字符串输出,会得到以下输出结果:

{
  "name": "Jason Bourne",
  "birth": "1970-07-21",
  "nationality": "American",
  "profession": "Spy",
  "alias": "Delta One",
  "location": "Hong Kong",
  "active": true
}

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JSON中key动态设置及JSON.parse和JSON.stringify()的区别 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • JavaScript极简入门教程(一):基础篇

    JavaScript是一门适用于Web前端开发的脚本语言,可以为静态的HTML页面增加一定的动态效果和交互性。 本篇教程是JavaScript的基础篇,主要介绍JavaScript的基础语法和常见数据类型,是初学者了解JavaScript的必备知识。具体内容如下: JavaScript基础语法 1. 注释 JavaScript的注释有两种方式,单行注释使用/…

    JavaScript 2023年5月17日
    00
  • 详解JS同源策略和CSRF

    JS同源策略指的是浏览器的一种安全策略,限制了一个源加载的文档或脚本如何与另一个源的资源进行交互。一般来说,源指的是协议+域名+端口号的组合,如果两个资源不属于同一个源,那么它们之间的交互就会受到限制。 常见的一些跨域问题,例如通过 XMLHttpRequest 发起的请求或者使用 iframe 加载的页面,都受到同源策略的限制。在前端开发过程中,我们通常使…

    JavaScript 2023年6月11日
    00
  • Chrome调试折腾记之JS断点调试技巧

    Chrome调试折腾记之JS断点调试技巧 介绍 Web开发中调试是必不可少的环节之一,Chrome提供了丰富的调试工具来帮助我们定位问题。本文将着重介绍Chrome的JS断点调试技巧。 步骤 步骤一:打开调试工具 打开需要调试的页面,按下 F12 或右键选择 审查元素 ,即可打开 Chrome 的调试工具。 步骤二:在JS代码中插入断点 在需要调试的代码行左…

    JavaScript 2023年6月10日
    00
  • Javascript中的prototype与继承

    JavaScript的原型(prototype)是一种机制,它允许对象继承另一个对象的属性和方法。在这种机制下,对象可以通过其原型链访问到其他对象的属性和方法。在本篇文章中,我们将探讨 JavaScript 中的 prototype 和继承。 原型(prototype) 每个Javascript对象(除了null和undefined)都有一个内部的属性[[P…

    JavaScript 2023年6月10日
    00
  • 给ListBox添加双击事件示例代码

    给ListBox添加双击事件的步骤如下: 1. 添加事件处理方法 在窗体的代码文件中,找到窗体类中的初始化代码(通常是InitializeComponent方法)。 在该方法的末尾添加以下代码,为ListBox对象添加一个名为DoubleClick的事件处理方法: this.listBox1.DoubleClick += new System.EventHa…

    JavaScript 2023年6月11日
    00
  • JS入门必备之八种数据类型

    JS语言作为一门动态类型语言,支持8种不同的数据类型,这些数据类型会在JS编程的各个领域中发挥着十分重要的作用,这里我给大家总结了一份完整的攻略。 一、Number类型 Number类型是JS中最基本的数据类型,表示数字数据,可以用十进制、二进制、八进制、十六进制等不同进制表示。在JS中,数值类型可以直接使用数值和运算符来实现计算,如下示例: var sum…

    JavaScript 2023年5月28日
    00
  • JavaScript读取中文cookie时的乱码问题的解决方法

    当使用JavaScript读取中文cookie时,出现乱码的问题是比较常见的。这是因为中文字符在计算机中是以Unicode编码存储,而cookie的值是被编码为字符串存储的。因此,需要将字符串转换为中文字符才能正确地读取cookie的值。 下面是解决这个问题的完整攻略: 1.设置cookie的编码方式 在服务器端设置cookie时,应该指定cookie的编码…

    JavaScript 2023年6月11日
    00
  • JS关于刷新页面的相关总结

    JS关于刷新页面的相关总结 在前端开发中,页面刷新是一项非常重要的操作。在JavaScript中,可以通过不同的方式来实现页面的刷新,本篇文章将对JS关于刷新页面的相关知识进行总结。 1. location.reload() location.reload() 方法用于重新加载当前文档。该方法会重新向服务器发送请求,从而获取最新的内容,刷新页面。下面是一个简…

    JavaScript 2023年6月11日
    00
合作推广
合作推广
分享本页
返回顶部