我正在从服务器中以给定的格式拉入一些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/

10-12 20:16