我以给定的格式从服务器中提取一些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上找不到太多东西。
答案 0 :(得分:4)
这是你想要做的吗?
data = simplejson.loads(yourString)
for image in data['images']:
image['viewurl'] = '/view?imagekey=%s' %(image['imagekey'])
您还可以使用 object_hook 。这适用于您的示例,但您可能需要根据实际数据进行一些调整:
>>> 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
object_hook会将viewurl键/值添加到JSON结构中包含{{1}的任何对象已经密钥了。因此,如果需要,您可能必须使用imagekey
中更具体的内容。
哦,如果你想把它编码回JSON字符串,你可以把最后一行改为
images
根据您正在解码/编码的数据量,我建议使用cjson重新编码数据的可能性。与simplejson / json相比,它闪电般快速。不幸的是它没有像object_hook这样的东西的支持。
答案 1 :(得分:2)
我想最简单的方法是将它放入python,操作它,然后将其转储回JSON:
>>> import simplejson
>>> data = simplejson.loads('''{"images": [{"rating": 5.0, "thumburl": "http://something.jpg", "description": "dfgd", "submitdate": "2011-01-29T07:54:02", "submituser": "J", "imagekey": "a"}]}''')
>>> for image in data['images']:
key = image['imagekey']
image["viewurl"] = "/view?imagekey=%s" % key
>>> outdata = simplejson.dumps(data)
答案 2 :(得分:1)
我能想到的最简单的方法是使用simplejson对本机python进行反序列化,修改本机python,并将其序列化为JSON。
答案 3 :(得分:0)
嗯,你有两种选择。在字符串上使用正则表达式或将JSON解析为Python对象,然后使用imageurl
值创建一个新属性,然后生成另一个JSON字符串。