下記理想のJSONに向けて、Pythonを作りましたが
思うように作成できません。対応方法をご教示願います。
問題点は以下の通りです。
・returnの上位の{}が入っている。
・returnに""がついている。
・セルの中には、計算式を入れておりまして
そのまま表示される。ex)=$B$7&$S8
・Idが同じときには、Listの配列に追加したい。
↑実際のjsonでは、return自体が2つ出力されています。理想のjsonは、Listオブジェクトに2つ出力されています
↑"Id"ごとに(同じid)に理想のjsonが出力されます
理想のJSON
JSON
1 return { 2 "TableName": "human", 3 "Item": { 4 "Id": {"S":"12345"}, 5 "List": {"L": [{"S":"book"}, {"S":"food"}]}, 6 } 7 }
実際のJSON
JSON
1 2{ 3 "return": { 4 "TableName": "human", 5 "Item": { 6 "Id": "=$B$7&$S7", 7 "List": [ 8 { 9 "S": "=$S7&\"-\"&$E7" 10 } 11 ] 12 } 13 } 14}{ 15 "return": { 16 "TableName": "human", 17 "Item": { 18 "Id": "=$B$7&$S8", 19 "List": [ 20 { 21 "S": "=$S8&\"-\"&$E8" 22 } 23 ] 24 } 25 } 26}
python
1book = openpyxl.load_workbook('C:\temp\abc.xlsx') 2sheets = book['sheet1'] 3path_w = 'output' 4 5 6for i in range(195): 7 Id = sheets.cell(row=i + 7, column=19 + 1).value 8 S = sheets.cell(row=i + 7, column=19 + 2).value 9 10 dictA = dict() 11 dictA.setdefault("return",{}) 12 13 dict1 = { 14 "TableName" : "human" 15 } 16 dictA["return"].update(dict1) 17 18 dictB = dict() 19 dictB.setdefault("Item",{}) 20 dictA["return"].update(dictB) 21 22 dictC = dict() 23 dictC.setdefault("Id",Id) 24 dictC.setdefault("List",[]) 25 dictB["Item"].update(dictC) 26 27 dictD = { 28 "S": S 29 } 30 dictC["List"].append(dictD) 31 32 with open(path_w, mode='a') as f: 33 f.write(json.dumps(dictA, sort_keys=False, ensure_ascii=False,indent=4))
回答1件
あなたの回答
tips
プレビュー