使用 JavaScript 向 JSON 对象添加新属性(元素)

Posted

技术标签:

【中文标题】使用 JavaScript 向 JSON 对象添加新属性(元素)【英文标题】:Add new attribute (element) to JSON object using JavaScript 【发布时间】:2010-10-18 16:56:57 【问题描述】:

如何?

【问题讨论】:

【参考方案1】:

JSON 代表 javascript 对象表示法。 JSON 对象实际上是一个尚未转换为它所代表的对象的字符串。

要为 JS 中的现有对象添加属性,您可以执行以下操作。

object["property"] = value;

object.property = value;

如果您提供一些额外的信息,例如您需要在上下文中做什么,您可能会得到更量身定制的答案。

【讨论】:

@shanehoban 这里 a 是 JSON,a.s 正如你刚刚定义的那样是一个字符串。现在您正尝试将["subproperty"] 添加到字符串中。你现在明白为什么会出现错误了吗? 对于初学者,请记住,正如 Quintin 所说,JSON“对象”根本不是对象,它只是一个字符串。在使用他的 object["property"] = value; 示例之前,您需要使用 JSON.parse() 将其转换为实际的 Javascript 对象 @shanehoban 检查我在顶部的答案,您将了解如何一次添加多个属性。 @EduardoLucio 那是因为你应该使用JSON.stringify @EduardoLucio 问题是console.log 不适合序列化。使用console.log(JSON. stringify(object))【参考方案2】:
var jsonObj = 
    members: 
           
            host: "hostName",
            viewers: 
            
                user1: "value1",
                user2: "value2",
                user3: "value3"
            
        


var i;

for(i=4; i<=8; i++)
    var newUser = "user" + i;
    var newValue = "value" + i;
    jsonObj.members.viewers[newUser] = newValue ;



console.log(jsonObj);

【讨论】:

正是我想要的,当必须以编程方式构造名称时添加一个元素 很好的例子。这对我有帮助。【参考方案3】:

JSON 对象只是一个 javascript 对象,因此 Javascript 是一种基于原型的语言,您所要做的就是使用点符号来处理它。

mything.NewField = 'foo';

【讨论】:

就是这样,我喜欢javascript原型!【参考方案4】:

从 2015 年开始使用 ECMAScript,您可以使用传播语法(…三个点):

let  people =  id: 4 ,firstName: 'John';
people =  ...people, secondName: 'Fogerty';

它允许你添加子对象:

people =  ...people, city:  state: 'California' ;

结果是:

  
   "id": 4,
   "firstName": "John",
   "secondName": "Forget",
   "city":   
      "state": "California"
   

您还可以合并对象:

var mergedObj =  ...obj1, ...obj2 ;

【讨论】:

【参考方案5】:

感谢这篇文章。我想添加一些有用的东西。

对于IE来说,很好用

object["property"] = value;

语法,因为 IE 中的一些特殊词可能会给你一个错误。

一个例子:

object.class = 'value';

这在 IE 中失败,因为“class”是一个特殊的词。我花了几个小时来处理这个。

【讨论】:

@Sunil Garg 您将如何将该值作为子对象存储到原始对象中的某个父对象?【参考方案6】:

您也可以使用ECMAScript 2015 中的Object.assign。它还允许您一次添加嵌套属性。例如:

const myObject = ;

Object.assign(myObject, 
    firstNewAttribute: 
        nestedAttribute: 'woohoo!'
    
);

Ps:这不会覆盖具有分配属性的现有对象。相反,它们将被添加。但是,如果您将值分配给现有属性,那么它将被覆盖。

【讨论】:

【参考方案7】:
extend: function()
    if(arguments.length === 0) return; 
    var x = arguments.length === 1 ? this : arguments[0];
    var y;

    for(var i = 1, len = arguments.length; i < len; i++) 
        y = arguments[i];
        for(var key in y)
            if(!(y[key] instanceof Function))
                x[key] = y[key];
            
                   
    ;

    return x;

扩展多个 json 对象(忽略函数):

extend(obj: 'hej', obj2: 'helo', obj3: objinside: 'yes');

将生成单个 json 对象

【讨论】:

【参考方案8】:

您还可以直接在对象文字中动态添加带有变量的属性。

const amountAttribute = 'amount';
const foo = 
                [amountAttribute]: 1
            ;
foo[amountAttribute + "__more"] = 2;

结果:


    amount: 1, 
    amount__more: 2

【讨论】:

【参考方案9】:

您还可以使用 extend 函数将新的 json 对象添加到您的 json 中,

var newJson = $.extend(, my:"json", other:"json");
// result -> my: "json", other: "json"

扩展函数的一个很好的选择是递归合并。只需添加真值作为第一个参数(阅读文档以获取更多选项)。例如,

var newJson = $.extend(true, , 
    my:"json",
    nestedJson: a1:1, a2:2
, 
    other:"json",
    nestedJson: b1:1, b2:2
);
// result -> my: "json", other: "json", nestedJson: a1:1, a2:2, b1:1, b2:2

【讨论】:

extend() 是 jQuery 的一部分【参考方案10】:

使用 jquery$.extend(),如下所示:

token = _token:window.Laravel.csrfToken;
data = v1:'asdass',v2:'sdfsdf'
dat = $.extend(token,data); 

我希望你为他们服务。

【讨论】:

以上是关于使用 JavaScript 向 JSON 对象添加新属性(元素)的主要内容,如果未能解决你的问题,请参考以下文章

通过 Javascript 向 Json 添加数据

尝试使用循环向 Javascript 对象添加多个属性

向 JSON 编码数组添加其他对象

向对象添加元素

javascript 使用Object spread向对象添加新属性

JavaScript - 使用扩展操作或替代方法向对象添加额外的键值