2016-06-23 5 views
-1

私は多くのjson文字列をmysqlデータベースから取得します。多くのjsonファイルを1つに接続する

{ 
    "type": "device", 
    "name": "Lampe", 
    "controls": [ 
    { 
     "type": "switch", 
     "name": "Betrieb", 
     "topic": "/lampe/schalter" 
    } 
    ] 
} 

の組み合わせで、このデバイスは、私が

は、誰かをするのpythonでこれを行う方法を理解していない

{ 
"name": "Test-System", 
"devices": [ 
{ 
    "type": "device", 
    "name": "Lampe", 
    "controls": [ 
    { 
     "type": "switch", 
     "name": "Betrieb", 
     "topic": "/lampe/schalter" 
    } 
    ] 
}, 
{ 
    other Device 

} 
] 
} 

JSONファイルの配列に取得する必要があります。たとえば

どのようにそれを行うアイデアを持っている?

答えて

2

あなたがこれを行うことができます2つの方法があります - 文字列に取り組んによって、またはPythonの-JSONデータ構造を扱うことでは。前者は後者には、すべてあなたの着信JSON-文字列を(json.loads()はどんなのために例外がスローされます検証します

# untested code 
s = '''{ 
"name": "Test-System", 
"devices": [ ''' 
while True: 
    j = get_json_from_DB() 
    if not j: break # null string or None 
    s = s + j + ',\n' 
s = s[:-2] + ']\n}\n' #[:-2 loses the last ',\n' from the loop 

それとも、Pythonのロード-JSONで動作するようにしたい場合は、その後

import json 

# untested code 
s = { 
    "name": "Test-System", 
    "devices": [] 
    } 
while True: 
    j = get_json_from_DB() 
    if not j: break # null string or None 
    s['devices'].append(json.loads(j)) 

# str = json.dumps(s) # ought to be valid 

ようなものになるだろう悪いJSON)、多数のデバイスでより効率的になります。したがって、デバイスの数が少ないRAMが制約された組み込みシステムで作業している場合を除き、後者のメモリフットプリントが大きいほど問題があります。

3

jsonモジュールを使用できます。

#!/usr/bin/env python3.5 

import json 

# Parse each device JSON file. 
device1 = json.load(open("device-switch-Lampe.json")) 
device2 = json.load(open("device-sensor-Wert.json")) 
# more devices ... 

obj = {"name": "Test-System", "devices": [device1, device2]} 
print(json.dumps(obj)) 

出力(清書):

{ 
    "devices": [{ 
     "type": "device", 
     "controls": [{ 
      "type": "switch", 
      "topic": "/lampe/schalter", 
      "name": "Betrieb" 
     }], 
     "name": "Lampe" 
    }, { 
     "type": "device", 
     "controls": [{ 
      "type": "sensor", 
      "topic": "/sensor/wert", 
      "name": "Wert" 
     }], 
     "name": "Sensor" 
    }], 
    "name": "Test-System" 
} 
関連する問題