我比較一個json對象的所有元素是否在另一個json中。 因爲我抓住了小一層的所有鑰匙,並檢查它們是否在大的一個,如果他們是相同的。進入更深層次,我稱之爲給它包含更深層的元素的函數。 (在這個函數中,現在我使用關鍵「結果」檢測更深的層,但是我未來會將其更改爲可變關鍵字 我的問題是我無法調用遞歸函數,它是「字符串索引必須是整數試圖調用該函數的功能時,不是Unicode」腳本json在python中與另一個json進行遞歸比較
def compareJson(example_json_s, target_json_s):
#parsed_json
example_json = example_json_s
target_json = target_json_s
p = 0
keys = []
for key in example_json.keys():
keys.insert(p, key)
p = p + 1
passed = 0;
for x in keys:
print "Keys"
if x != "results":
if not x in target_json or x not in example_json.keys() and not example_json[x] == target_json[x]:
passed = 1
else:
print """###inhabits "results " going one layer deeper"""
compareJson(example_json[key], target_json[key])
return passed
和一些示例JSON對象:
{
"results": {
"clock": true,
"update": false,
"autoreg": false
}
}
{
"id": "1523",
"dlid": "009029",
"serial": "1017030022",
"statuscode": 128,
"results": {
"event": true,
"counter": true,
"clock": true,
"eqep": true,
"usb": false,
"modem": true,
"sim": true,
"pin": true,
"encrypt": false,
"upload": true,
"update": true,
"autoreg": true
},
"ok": false,
"confirmed": false
}
和錯誤代碼在這裏:
Traceback (most recent call last):
File "/home/philip/Desktop/empfang_test.py", line 199, in <module>
empfange() #Programm wartet in einer Endlosschleife auf eingehende Nachrichten.
File "/home/philip/Desktop/empfang_test.py", line 193, in empfange
checkvalue=compareJson(json.loads(config[1][1]),parsed_json_dummy)
File "/home/philip/Desktop/empfang_test.py", line 183, in compareJson
compareJson(example_json[key],target_json[key])
TypeError: string indices must be integers, not str
你能修復縮進,並添加完整的錯誤消息啓動時? – M4rtini
期望的輸出是什麼?真/假或列表(或字典)哪些字段存在? – Pynchia
夾具https://pythonhosted.org/testfixtures/comparing.html提供字典比較呢? –