在JSON字典中每一個關鍵值我有一個JSON字符串:迭代通過在Python
{"emailId":[],"Age":[],"siblings":[],"addedGroupIds":[],"role":{"name":"x","description":"y","Permissions":[],"clientId":102}}
我想從每一個鍵值對替換值(除非值本身是一本字典,如:「角色「)。我將上述字符串轉換爲somerandomFunc()中的字典,然後將此字典發送給iterator()。 Iterator()將遞歸地檢查每個鍵值對中的值是否是字典。如果該值不是字典,它將把鑰匙smartScanner(),我將與myTestString被替換收到鍵的值
def somerandomfunc(self,JSONString):
payload=simplejson.loads(JSONString)
self.payload=payload
iterator(payload)
def iterator(self,payload):
for i in payload:
if isinstance(payload[i],dict):
self.iterator(payload[i])
else:
self.smartScanner(i)
def smartScanner(self,i):
mytestString='">qqqq'
if (self.payload.has_key(i)):
self.payload[i]=mytestString
print "%s:%s"%(i,self.payload.has_key(i))
我得到以下輸出:
existingGroupIds:True
existingUserIds:True
assetPermissions:False
name:False
clientId:False
description:False
removedGroupIds:True
removedUserIds:True
addedGroupIds:True
addedUserIds:True
這意味着如果smartScanner()中的語句對於「assetPermissions」,「name」,「clientId」和「description」鍵失敗。我無法用myteststring替換這些鍵的值。我可以理解它失敗的原因是因爲它試圖訪問有效載荷[「名稱」]而不是有效載荷[「角色」] [「名稱」]
如何更改我的邏輯,以便能夠替換甚至對於「assetPermissions」,「name」,「clientId」和「description」鍵值?而且我的程序不會破壞,無論JSON有效載荷中是否存在字典的任何層次結構
什麼是self.payload?這個實例屬性與有效載荷不同嗎?順便說一句,在python中,通常我們不會在括號中包括if條件,除非它們是有用的,否則某個習慣於閱讀python的人會期望它做某事。 –
我想用myTestString替換值「x」,「y」和「102」@PadraicCunningham –
是的,我的程序因嵌套字典失敗。我可以替換鍵「電子郵件」,「年齡」等的值。但不是「assetPermissions」,「name」,「clientId」和「description」@PadraicCunningham –