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

yizhihongxing

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类型相关的常用操作总结”的详细说明。 一、JavaScript类型 JavaScript中共有七种内置类型,分别为: 原始类型(Primitive types):布尔(Boolean)、数字(Number)、字符串(String)、空值(Null)、未定义(Undefined)、Symbol。 对象(Object):包括可以简…

    JavaScript 2023年6月10日
    00
  • Javascript单例模式的介绍和实例

    当我们开发一些复杂的web应用时,我们难免会需要创建一些全局预留变量或者共享某些对象,这时候单例模式就可以派上用场了。 什么是单例模式 首先,单例模式是一种创建型的设计模式。它实现了一个类只能够被创建一次的功能。简单来说,就是当某个类只需要一个实例时,就可以使用单例模式。 单例模式的实现 要实现单例模式,可以采用以下几种方式: 立即执行函数 立即执行函数是实…

    JavaScript 2023年6月10日
    00
  • JS中的六种继承方式以及优缺点总结

    下面是详细讲解“JS中的六种继承方式以及优缺点总结”的完整攻略。 JS中的六种继承方式 在JS中,继承是OO的一个重要的概念,通过继承可以实现代码的重用和封装性,JS中有六种继承方式,分别是: 1.原型链继承 原型链继承是JS中最常见的一种继承方式,它是利用原型对象来实现的,将子类的原型指向父类的实例,从而实现子类继承父类的方法和属性。 function P…

    JavaScript 2023年5月27日
    00
  • Vue router配置与使用分析讲解

    对于Vue router配置与使用,可以分为以下几个部分进行讲解: 安装Vue router 配置Vue router 使用Vue router 下面我们逐一讲解。 1. 安装Vue router 首先,我们需要在项目中安装Vue router。可以使用npm或yarn安装。命令如下: npm install vue-router –save 或 yarn…

    JavaScript 2023年6月11日
    00
  • javascript对象的多种合并方式详解

    下面是针对 “JavaScript 对象的多种合并方式” 的完整攻略: 标题 JavaScript 对象的多种合并方式详解 简介 JavaScript 中对象合并是一种非常常见的操作,它可以让开发者把已有的对象拼接在一起,生成一个新的对象。本文将会详细讲解 JavaScript 中对象合并的多种方法。 对象合并的多种方式 Object.assign() Ob…

    JavaScript 2023年5月27日
    00
  • JS实现的抛物线运动效果示例

    下面我将为你详细讲解“JS实现的抛物线运动效果示例”的完整攻略。具体内容如下: 抛物线运动效果实现的原理 在实现抛物线运动效果之前,我们需要先了解它的基本原理。通俗地说,抛物线运动是指一种自由落体运动,其加速度大小保持不变,但方向发生变化,运动轨迹呈现抛物线形状。在应用中,我们可以通过以下公式来计算抛物线运动的位置: x = vx * t + x0; y =…

    JavaScript 2023年5月28日
    00
  • JavaScript自定义超时API代码实例

    让我来详细讲解“JavaScript自定义超时API代码实例”的攻略。 简介 JavaScript 是一种非常强大的脚本语言,它可以在网页上实现丰富的交互效果。但是,在某些特定的场景中,我们需要实现一些异步操作,然而又需要限制它的执行时间,这个时候就需要使用超时 API 来解决了。JavaScript 提供了一个超时机制,我们可以在一段时间内等待一个异步操作…

    JavaScript 2023年6月11日
    00
  • JavaScript面向对象程序设计三 原型模式(上)

    JavaScript面向对象程序设计三 原型模式(上) 前言 在 JavaScript 面向对象编程中,原型模式是非常重要的一个概念。通过原型模式,可以更加方便地实现对象的创建、继承等功能。下面,我们来详细介绍 JavaScript 原型模式的相关内容。 什么是原型模式? 在 JavaScript 中,每个对象都有一个原型对象。原型对象就是用来实现对象共享的…

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