【问题标题】:Pushing objects inside JSON array在 JSON 数组中推送对象
【发布时间】:2017-05-02 07:09:26
【问题描述】:

我需要为我的数据数组推送一个新 ID。如果我尝试推入数据,它会再创建一个对象,但不会为每个对象添加到数组中。

数据:

[{"devices":{"dID":"TLSM01"},"uuid":"e863c776-f939-4761-bbce-bf0501b42ef7"},
 {"devices":{"dID":"TLSM01"},"uuid":"5a0cd70d-891d-48d8-b205-e92e828ac445"}]

需要添加数据:

{"EntityID":"12458412548"}

最终结果:

[{"devices":{"dID":"TLSM01","EntityID":"12458412548"},"uuid":"e863c776-f939-4761-bbce-bf0501b42ef7"},
 {"devices":{"dID":"TLSM01","EntityID":"12458412548"},"uuid":"5a0cd70d-891d-48d8-b205-e92e828ac445"}]

代码:

var data = [{
  "devices": {
    "dID": "TLSM01"
  },
  "uuid": "e863c776-f939-4761-bbce-bf0501b42ef7"
}, {
  "devices": {
    "dID": "TLSM01"
  },
  "uuid": "5a0cd70d-891d-48d8-b205-e92e828ac445"
}]
data.push({
  "EntityID": "test"
});
console.log(data);

【问题讨论】:

  • JSON 是一种用于数据交换的文本符号(More.) 当您将一个值推入该数组时,它不是 JSON。这只是一个数组。它可能永远不会是 JSON。
  • 您使用哪种语言?也许是Javascript?
  • “如果我尝试推入数据,它会再创建一个对象,但不会为每个对象添加到数组中。” 向我们展示您的代码。我们无法为您提供我们看不到的代码。
  • 我正在使用 JavaScript
  • 你能简化这个例子吗?无休止地滚动的单行是不可能完全理解的。

标签: javascript arrays json


【解决方案1】:

data 是一个包含对象的数组。如果要为每个对象添加属性,则必须遍历数组。

您需要向不是数组的对象devices 添加一个新属性,因此您不能使用.push()

var data = [{"devices":{"dID":"TLSM01"},"uuid":"e863c776-f939-4761-bbce-bf0501b42ef7"},{"devices":{"dID":"TLSM01"},"uuid":"5a0cd70d-891d-48d8-b205-e92e828ac445"}];

data.forEach(d=>d.devices['EntityID']="test");

console.log(data);

【讨论】:

  • 为什么使用括号形式? (只是好奇。)还要注意他们的“最终结果”并没有限制EntityID中的E,尽管他们在他们的例子中做了。
  • @T.J.Crowder 我没有任何理由使用括号形式。以防万一他需要使用不同的名称和符号。实际上,OP 使用的是大写字母E
  • 谢谢——他们又编辑了!以前他们不是。 :-)
【解决方案2】:

如果您的“最终结果”是您想要达到的结果,那么您不想推动任何事情。您只是在数组中已经存在的条目上设置一个新属性。所以,循环并这样做:

data.forEach(function(entry) {
    entry.EntityID = "12458412548";
});

(或简单的for 循环。)

如果你使用的是 ES2015+ 语法,你可以使用箭头函数:

data.forEach(entry => entry.EntityID = "12458412548");

...或for-of 循环:

for (const entry of data) {
    entry.EntityID = "12458412548";
}

【讨论】:

    【解决方案3】:

    DEMO

    var jsonObj = [{"devices":{"dID":"TLSM01"},"uuid":"e863c776-f939-4761-bbce-bf0501b42ef7"},
     {"devices":{"dID":"TLSM01"},"uuid":"5a0cd70d-891d-48d8-b205-e92e828ac445"}];
     
    jsonObj.map(item => item.devices["EntityID"] = "12458412548");
    
    console.log(jsonObj);

    【讨论】:

      猜你喜欢
      • 2019-08-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-11
      相关资源
      最近更新 更多