我正在从服务器中以给定的格式拉入一些JSON:
{"images": [{"rating": 5.0, "thumburl": "http://something.jpg", "description": "dfgd", "submitdate": "2011-01-29T07:54:02", "submituser": "J", "imagekey": "a"}, ...]}
我必须使用“imagekey”向每个元素添加一个新元素“viewurl”
{"images": [{"rating": 5.0, "thumburl": "http://something.jpg", "description": "dfgd", "submitdate": "2011-01-29T07:54:02", "submituser": "J", "imagekey": "a", "viewurl": "/view?imagekey=a"}, ...]}
可能有一种简单的方法可以做到这一点,但是除了转储和加载之外,我在simplejson上很难找到更多的内容。
最佳答案
这就是你想做的吗?
data = simplejson.loads(yourString)
for image in data['images']:
image['viewurl'] = '/view?imagekey=%s' %(image['imagekey'])
您也可以使用对象挂钩。这对您的示例有效,但您可能需要根据实际数据对其进行一些调整:
>>> def addImageKey(dataPart):
... if dataPart.has_key('imagekey'):
... dataPart['viewurl'] = '/view?imagekey=%s' %dataPart['imagekey']
... return dataPart
...
>>> decoded_with_viewurl = json.loads(myString, object_hook = addImageKey)
我提到需要调整它的原因是,在它的当前表单中,
addImageKey
对象钩子将把viewurl键/值添加到JSON结构中已经包含imagekey
键的任何对象中。因此,如果需要,您可能需要对images
中的项使用更具体的内容。如果你想把它编码回JSON字符串,你可以把最后一行改成
>>> reencoded_with_viewurl = json.dumps(json.loads(myString, object_hook = addImageKey))
根据解码/编码的数据量,我建议使用cjson重新编码数据。与simplejson/json相比,它的速度非常快。不幸的是,它不支持像object_hook这样的东西。
关于python - 在Python中编辑现有JSON,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4859071/