使用Javascript

时间:2017-02-23 14:32:35

标签: javascript json node-red

我认为在没有找到答案的情况下,我已经阅读了所有以前对任何类似问题的回答。

我正在尝试构建一个看起来像这样的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(node-red):

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

如果我尝试:

outputJSON.push({label : DataVal});

我只是在结果结构中得到“label”而不是它的值。是否有可能让Javascript扩展变量'label'并将其值放入?有一些例子声明2个数据变量可以做这样的事情,但它们都有效地硬编码声明中的'label'值。但是,有很多'标签'项目,所以我真的不想硬编码。它也会使我对其他类似数据具有通用性。

这是Javascript的限制还是我错过了什么?

2 个答案:

答案 0 :(得分:1)

此:

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(速记属性名称)开始的,可以在MDN上的http://nsidc.org/sites/nsidc.org/files/images/data/polar-stereo/ssmi_gridmap_arctic.gif下阅读更多内容

答案 1 :(得分:0)

只是整理一下。以亚当的答案为例,我最终得到了这个:

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。希望有人发现这一点并帮助他们!