我认为在没有找到答案的情况下,我已经阅读了所有以前对任何类似问题的回答。
我正在尝试构建一个看起来像这样的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的限制还是我错过了什么?
答案 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。希望有人发现这一点并帮助他们!