jsonファイルから特定の値を取得してから、新しいjsonファイルを「再作成」しようとします(変換のようなもの)。以下のコードで。関数が返す結果は、結果を追加した場合変数が変更されたときに辞書の値が変更される
oldFile.json parentObj辞書内に位置するリストに、JSONにある各アイテムの辞書
{
"elements": [
{
"fieldValues": [
{
"id": "101",
"value": "John"
},
{
"id": "102",
"value": "Doe"
}
]
},
{
"fieldValues": [
{
"id": "101",
"value": "Jane"
},
{
"id": "102",
"value": "Doe"
}
]
}
]
}
file.py
import json
import os
output = {}
parentObj = {}
parentObj['entries'] = []
def grabVals(iCounter):
# legend is a pre-determined dictionary matching ids with names (like first/last)
for myKey in subResults['elements'][iCounter]['fieldValues']:
if myKey['id'] in legend:
if 'value' in myKey:
newEntry = {legend[myKey['id']]: myKey['value']}
output.update(newEntry) # first adds 'John', then 'Doe'
# sample output below; next iteration would be 'Jane Doe'
# {"First": "John", "Last": "Doe"}
return output
subResults = json.loads(oldFile.json)
formCount = len(subResults['elements']) # subResults is the json above file. Grab total number of entries
for counter in range(0, formCount):
if convertTime(formEntryStamp, formEntryID) == 'keep': # self defined function (returns keep or None)
parentObj['entries'].append(grabVals(counter))
else:
pass
export = json.dumps(parent_obj, indent=4, sort_keys=False) # create new json based of dictionary
f = open("finished.json", "w")
f.write(export)
f.close()
でfinished.json
{
"entries": [
{
"First": "John",
"Last": "Doe"
},
{
"First": "Jane",
"Last": "Doe"
}
]
}
実際のデータでの
予想データ:
{
"entries": [
{
"First": "Jane",
"Last": "Doe"
},
{
"First": "Jane",
"Last": "Doe"
}
]
}
私の質問:どのように私は永久にparentObjに書くのですか?関数内でoutput
が変更された場合、parentObj
の値は新しい値で上書きされます。これには、変更可能/不変のオブジェクトを行うための何かがありますか?それ以上の明確化が必要であることをお知らせください。 (Pythonでオブジェクトの突然変異にいくつかの読み取りを行った後
AFAIKTが、それは常に '{「結果」:「条件文を」}返すのでええと、' grabVals(カウンタ) 'やっていることだと思います'と、それに渡される引数を使用したことがありません。..何もしないと思われる 'else:pass'とは何か... –
つまり、サンプル入力、取得している出力、期待している出力を提供してください。* –
ようこそStackOverflowへ。ヘルプドキュメントの投稿ガイドラインを読み、それに従ってください。 [最小、完全で検証可能な例](http://stackoverflow.com/help/mcve)がここに適用されます。 MCVEコードを投稿して問題を正確に記述するまでは、効果的にお手伝いすることはできません。 与えられたコードをテキストファイルに貼り付けて問題を再現できるはずです。 – Prune