2

指定された形式でサーバーから 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 で多くを見つけるのに苦労しています。

4

4 に答える 4

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)

微調整が必​​要になる可能性について言及する理由は、現在の形式では、addImageKeyobject_hookがviewurlキー/値をJSON構造内の任意のオブジェクトに追加するためimagekeyです。したがって、必要に応じて、アイテムに固有の何かを使用するimages必要がある場合があります。

ああ、それをJSON文字列にエンコードして戻したい場合は、最後の行を次のように変更するだけです。

>>> reencoded_with_viewurl = json.dumps(json.loads(myString, object_hook = addImageKey))

デコード/エンコードするデータの量に応じて、cjsonを使用してデータを再エンコードする可能性をお勧めします。simplejson/jsonと比較して非常に高速です。残念ながら、object_hookなどはサポートされていません。

于 2011-02-01T05:05:14.217 に答える
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)
于 2011-02-01T05:05:31.810 に答える
1

私が考えることができる最も簡単な方法は、simplejsonを使用してネイティブPythonにデシリアライズし、ネイティブPythonを変更して、JSONにシリアル化することです。

于 2011-02-01T05:04:57.243 に答える
0

さて、あなたには2つの選択肢があります。文字列で正規表現を使用するか、JSON を Python オブジェクトに解析してから、値を使用して新しい属性を作成し、imageurl別の JSON 文字列を生成します。

于 2011-02-01T05:04:19.873 に答える