2016-12-01 4 views
0

javascriptを使用してJSONオブジェクトを変更する手助けができますか?現在、角度jを使用していて、JSONデータをファイルから取得しています。しかし、私は以下のJSONを修正し、それに応じて処理したいと思っています。JavaScriptでのJSONオブジェクトの変更

現在のJSON

{ 
    "account": { 
    "premise": { 
     "zone": [ 
     { 
      "id": 1, 
      "name": "Tps John?!? \"':7", 
      "type": "DOOR", 
      "functionType": "ENTRY_EXIT", 
      "sensor": [ 
      { 
       "id": 1, 
       "type": "DRY_CONTACT", 
       "sourceType": "ZIGBEE", 
       "serialNumber": "000d6f00030cdbcf.1", 
       "model": "MCT-320 SMA", 
       "manufacturer": "Visonic", 
       "firmwareVersion": "0x00040008", 
       "hardwareVersion": "1" 
      } 
      ] 
     }, 
     { 
      "id": 2, 
      "name": "Motion Sensor $-*9$+%;47$9 %;:?2", 
      "type": "MOTION", 
      "functionType": "INTERIOR_FOLLOWER", 
      "sensor": [ 
      { 
       "id": 2, 
       "type": "MOTION", 
       "sourceType": "ZIGBEE", 
       "serialNumber": "000d6f0004b2af93.1", 
       "model": "NEXT K85 SMA", 
       "manufacturer": "Visonic", 
       "firmwareVersion": "0x0004000b", 
       "hardwareVersion": "1" 
      } 
      ] 
     } 
     ] 
    } 
    } 
} 

しかし、センサーオブジェクトを持っていますが、私は、センサのあなたの配列を取得するにはなど

{ 
    "account": { 
    "premise": { 
     "sensor": [ 
     { 
      "id": 1, 
      "type": "DRY_CONTACT", 
      "sourceType": "ZIGBEE", 
      "serialNumber": "000d6f00030cdbcf.1", 
      "model": "MCT-320 SMA", 
      "manufacturer": "Visonic", 
      "firmwareVersion": "0x00040008", 
      "hardwareVersion": "1" 
     }, 
     { 
      "id": 2, 
      "type": "MOTION", 
      "sourceType": "ZIGBEE", 
      "serialNumber": "000d6f0004b2af93.1", 
      "model": "NEXT K85 SMA", 
      "manufacturer": "Visonic", 
      "firmwareVersion": "0x0004000b", 
      "hardwareVersion": "1" 
     } 
     ] 
    } 
    } 
} 
+0

ちょうどあなたがいないプロパティを削除、オブジェクトを作成するために 'JSON.parseを()'を使用することも'JSON.stringify()'を使用してそれを必要とし、それをシリアル化してください。 –

答えて

0

の下にのみセンサーを維持したいゾーンオブジェクトでJSON以上から次のように、最初のオブジェクトのaccount.premise.zone.map()を使用するだけです。

o.account.premise.zone.map(e=>e.sensor)

あなたは以下のような完全なオブジェクト再編成することができます:あなたが最初のオブジェクトに文字列から、それを変換するために、ファイルデータにJSON.parse()を使用する必要があります

let o = { 
    "account": { 
    "premise": { 
     "zone": [ 
     { 
      "id": 1, 
      "name": "Tps John?!? \"':7", 
      "type": "DOOR", 
      "functionType": "ENTRY_EXIT", 
      "sensor": [ 
      { 
       "id": 1, 
       "type": "DRY_CONTACT", 
       "sourceType": "ZIGBEE", 
       "serialNumber": "000d6f00030cdbcf.1", 
       "model": "MCT-320 SMA", 
       "manufacturer": "Visonic", 
       "firmwareVersion": "0x00040008", 
       "hardwareVersion": "1" 
      } 
      ] 
     }, 
     { 
      "id": 2, 
      "name": "Motion Sensor $-*9$+%;47$9 %;:?2", 
      "type": "MOTION", 
      "functionType": "INTERIOR_FOLLOWER", 
      "sensor": [ 
      { 
       "id": 2, 
       "type": "MOTION", 
       "sourceType": "ZIGBEE", 
       "serialNumber": "000d6f0004b2af93.1", 
       "model": "NEXT K85 SMA", 
       "manufacturer": "Visonic", 
       "firmwareVersion": "0x0004000b", 
       "hardwareVersion": "1" 
      } 
      ] 
     } 
     ] 
    } 
    } 
}; 
o = { 
    account:{ 
    premise:{ 
     sensor: o.account.premise.zone.map(e=>e.sensor) 
    } 
    } 
} 

を。小さな例:

JSON.parse("{foo:bar") //String 
> { foo:bar } //Object 
+0

素晴らしい仕事は地図に変わります。多くはそれを忘れる。 +1 –

+0

既存のオブジェクトで編集するのではなく、オブジェクトを作成しています。 – Mahi

+0

この機能は、熱いポーカーで私の脳にブランド化されています。私は常に大きなオブジェクトで作業しています。私は 'map()'を使う前後にはっきりと覚えています:D – xShirase

0

これは、最適化された方法ではありませんが、これは解決策の1

var input = {}; //it is your input Object 
var accountObj = { account: { premise: { sensor : [] }}}; 
input.account.premise.zone.forEach(function(zones) { 
    zones.sensor.forEach(function(sensorObj) { 
     accountObj.account.premise.sensor.push(sensorObj); 
    }); 
}); 
console.log(accountObj); 
+0

ありがとう!!ここでは空のオブジェクトを1つ作成して値をプッシュします。私のオリジナルのJSONは、前提の中にいくつかの他のオブジェクトを持っているからです。 – Batman

関連する問題