2017-07-31 11 views
-1

を返す私は2つのPythonのリストを持っている:私はそれらをマージし、タイプのJSONを返すにはどうすればよいマージPythonのリストとJSON

cols = ['InfoKey', 'InfoData'] 

vals = ['Row 1: [LANGUAGE SUPPORT MODE, Standard]', 'Row 2: [RELEASE, 15.00.04.01]', 'Row 3: [VERSION, 15.00.04.01]'] 

{ 
"data": [{ 
     "Infokey": "LANGUAGE SUPPORT MODE", 
     "InfoData": "Standard" 
    }, 
    { 
     "Infokey": "RELEASE", 
     "InfoData": "15.00 .04 .01" 
    }, 
    { 
     "Infokey": "VERSION", 
     "InfoData": "15.00 .04 .01" 
    } 
] 

}

+2

自分でコードを投稿して、どこにいるのかを明確に説明する必要があります。 'LANGUAGE SUPPORT MODE'や' Standard'のような内部文字列は引用符で囲まれていないので、この問題はややこしいことを認めます。おそらく、引用符、コンマ、または角括弧は含まれていないでしょう。そうでなければ、データを正確に解析することは非常に困難です。 –

答えて

0

regexここで[...]の間の文字列を抽出します。ここでサンプル例です:

>>> import re 
>>> vals = ['Row 1: [LANGUAGE SUPPORT MODE, Standard]', 'Row 2: [RELEASE, 15.00.04.01]', 'Row 3: [VERSION, 15.00.04.01]'] 
>>> for s in vals: 
...  a, b = re.findall('\[([^"]*)\]', s)[0].split(', ') 
...  print('Infokey: ', a) 
...  print('InfoData: ', b) 
... 
Infokey: LANGUAGE SUPPORT MODE 
InfoData: Standard 
Infokey: RELEASE 
InfoData: 15.00.04.01 
Infokey: VERSION 
InfoData: 15.00.04.01 

PS:あなたはdictに、私は、コンソールに印刷していた出力を格納し、リストにdictのオブジェクトのそれぞれを追加する必要があります。私はそれをあなたのために残しています。

1

@PMによると、これはデータ形式が正確に記述されているかどうかに大きく依存します。

import json 

cols = ['InfoKey', 'InfoData'] 
vals = [ 
    'Row 1: [LANGUAGE SUPPORT MODE, Standard]', 
    'Row 2: [RELEASE, 15.00.04.01]', 
    'Row 3: [VERSION, 15.00.04.01]' 
] 

master = [] 

for item in vals: 
    data = item[item.find('[')+1:item.find(']')] 
    parts = data.split(',') 
    master.append({cols[0]: parts[0].strip(), 
     cols[1]: parts[1].strip()}) 

print json.dumps({'data': master}) 
1

これについてどのような:

import json 
l = [] 
for v in vals: 
    info = v.split(': ')[1].replace('[', '').replace(']', '') 
    key, data = info.split(', ') 
    d = {} 
    d["InfoKey"] = key 
    d["InfoData"] = data 
    l.append(d) 

json_dict = {"data": l} 

print json.dumps(json_dict) 

結果:

{"data": [{"InfoData": "Standard", "InfoKey": "LANGUAGE SUPPORT MODE"}, {"InfoData": "15.00.04.01", "InfoKey": "RELEASE"}, {"InfoData": "15.00.04.01", "InfoKey": "VERSION"}]} 
+0

は@ PM2Ringに固定されています。 – JacobIRR

0

また、これは動作します

cols = ['InfoKey', 'InfoData'] 
vals = ['Row 1: [LANGUAGE SUPPORT MODE, Standard]', 'Row 2: [RELEASE, 15.00.04.01]', 'Row 3: [VERSION, 15.00.04.01]'] 
myData = [] 
for v in vals: 
    v = v.split(': ')[1].split(', ') 
    myData.append(dict(zip(cols, [v[0][1:], v[1][:-1]]))) 
json_data = json.dumps({'data':myData}) 
print(json_data) 

出力:

{"data": [{"InfoKey": "LANGUAGE SUPPORT MODE", "InfoData": "Standard"}, {"InfoKey": "RELEASE", "InfoData": "15.00.04.01"}, {"InfoKey": "VERSION", "InfoData": "15.00.04.01"}]} 
0

コードは以下valsのデータは、安全であり、すなわち、LANGUAGE SUPPORT MODEStandard等内の文字列は決してがカンマや角括弧を含まないことを前提。

str.splitメソッドとstr.stripを組み合わせて文字列を解析するだけで、不要なスペースを取り除くことができます。次に、colsに含まれているキーで圧縮して辞書に変換できます。

import json 

cols = ['InfoKey', 'InfoData'] 

vals = [ 
    'Row 1: [LANGUAGE SUPPORT MODE, Standard]', 
    'Row 2: [RELEASE, 15.00.04.01]', 
    'Row 3: [VERSION, 15.00.04.01]' 
] 

data = [] 
for line in vals: 
    _, lst = line.split(':') 
    a = [u.strip() for u in lst.strip()[1:-1].split(',')] 
    data.append(dict(zip(cols, a))) 

json_obj = {'data': data} 
print(json.dumps(json_obj, indent=4)) 

当然の出力

{ 
    "data": [ 
     { 
      "InfoKey": "LANGUAGE SUPPORT MODE", 
      "InfoData": "Standard" 
     }, 
     { 
      "InfoKey": "RELEASE", 
      "InfoData": "15.00.04.01" 
     }, 
     { 
      "InfoKey": "VERSION", 
      "InfoData": "15.00.04.01" 
     } 
    ] 
} 

、我々はリストの内包表記を使用してdataを作成することができ、私はあなたが以前のバージョンであることに同意すると思うはるかより読める。 :)

data = [dict(zip(cols, (u.strip() for u in line.split(':')[1].strip()[1:-1].split(',')))) for line in vals] 
関連する問題