使用 Javascript 构建动态 JSON 结构

Build a dynamic JSON structure with Javascript

我想我已经阅读了之前对任何类似问题的所有回复,但没有找到答案。

我正在尝试构建一个看起来像这样的 JSON 结构(但更大 :));

[{"APC": {
    "Description": "",
    "Data": "001,044,1064",
    "Units": "",
    "AbbrvUnits": ""
}
}, {"DATE": {
    "Description": "",
    "Data": 1487858497000,
    "Units": "Date",
    "AbbrvUnits": ""
}}]

但我能得到的最接近的是这个数据结构;

[{
"DataItem": "APC",
"DataVal": {
    "Description": "",
    "Data": "001,044,1064",
    "Units": "",
    "AbbrvUnits": ""
}
}, {
"DataItem": "DATE",
"DataVal": {
    "Description": "",
    "Data": 1487858497000,
    "Units": "Date",
    "AbbrvUnits": ""}}]

与此 javascript(节点红色):

DataVal = {
            'Description' : "",
            'Data' : DataValue,
            'Units' : UnitsStr,
            'AbbrvUnits' : ""
            };
outputJSON.push({'DataItem' : label, DataVal});

如果我尝试:

outputJSON.push({label : DataVal});

我只是在结果结构中得到 "label" 而不是它的值。有没有可能让Javascript展开变量'label',把它的值放进去?有一些声明 2 个数据变量来执行类似操作的示例,但它们都有效地硬编码了声明中的 'label' 值。但是,有很多 'label' 项目,所以我真的不想硬编码。它还将使我拥有的其他类似数据通用。

这是 Javascript 的限制还是我遗漏了什么?

这个:

outputJSON.push({'DataItem' : label, DataVal});

应该是这样的:

var obj = {};
obj[label] = DataVal;
outputJSON.push(obj);

对象是 key-value 对,因此,在您的原始代码中,您传递的对象具有键 DataItem 和值为 label 的值,并且,由于 JavaScript 现在解析它解析的对象声明的方式:

{DataVal} as {"DataVal":DataVal}

编辑

最后一部分(关于 {DataVal} 是如何解析的)是 ECMAScript 2015 的(Shorthand 属性 名称),更多内容可以在 Object Initializer 下阅读在 MDN 上

只是为了整理一下。根据 Adam 的回答,我得到了这个:

Var DataVal ={}
// inside a loop of 'DataItems' assign key:value pairs where
// the DataItem is a unique value

DataVal[DataItem] = {
        'Data' : DataValue,
        'Units' : UnitsStr,
        };

然后我可以将其分配给 Node-Red 中的 msg.payload。希望有人能找到它并对他们有所帮助!