2017-02-23 18 views
0

これまでのすべての回答を似たような質問に読んだことがあります。Javascriptを使用して動的JSON構造を構築する

私はこのように見えるJSON構造を構築しようとしています。

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

しかし、私が得ることができるのはこのデータ構造です。このJavaScript(ノード・赤)と

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

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

私がしようとした場合:

outputJSON.push({label : DataVal}); 

私は単に代わりに、その値の得られた構造に "ラベル" を取得します。 Javascriptで変数 'label'を展開してその値を入れられるのは可能ですか?このようなことをするために2つのデータ変数を宣言するいくつかの例がありますが、それらはすべて宣言で 'label'値を効果的にハードコーディングします。しかし、多くの 'ラベル'アイテムがあるので、私は実際にそれをハードコードしたくありません。また、私が持っている他の同様のデータのためにこれを一般化するでしょう。

これはJavascriptの制限ですか、何か不足していますか?

答えて

1

この:

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

は次のようになります。

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

オブジェクトはkey-valueペアなので、あなたの元のコードでは、あなたはDataItemのキーを持つオブジェクトを渡していると、 labelの値、およびJavaScriptがオブジェクト宣言を解析する方法のために、次のように解析します。

{DataVal} as {"DataVal":DataVal} 

EDIT

この最後の部分({DataVal}が解析されるかについては)ECMAScriptの2015(短縮形のプロパティ名)のようであり、よりちょうどこれを整理するためにMDN

+0

ブリリアント。出来た;私は正確に理由をさらに読むでしょう。どうもありがとう。 – Brian

+0

これは、あまりにも多くのオブジェクト層で終わったので、私が何をしているかはまだ分かりません。データにアクセスするには、msg/payload [0] .APCを使用する必要があります(payload.msg = outputJSONと同じです)。私は単にpayload.msg.APCを使うことができるように構造化できますか? – Brian

+0

ああ、プッシュは不要なので使用しないでください。項目 'label'がユニークな場合、msg.payloadに 'obj'を代入することができます。とった。 – Brian

0

Object Initializer下でそれについて読むことができます。 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に割り当てます。誰かがこれを見つけて助けてくれることを願っています!

関連する問題