使用 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。希望有人能找到它并对他们有所帮助!
我想我已经阅读了之前对任何类似问题的所有回复,但没有找到答案。
我正在尝试构建一个看起来像这样的 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。希望有人能找到它并对他们有所帮助!