2011-02-01 17 views
2

に私は与えられた形式で、サーバーからいくつかのJSONで引っ張ってる:編集既存のJSONは、Python

{"images": [{"rating": 5.0, "thumburl": "http://something.jpg", "description": "dfgd", "submitdate": "2011-01-29T07:54:02", "submituser": "J", "imagekey": "a"}, ...]} 

私が使用して各要素に新しい要素「viewurl」を追加する必要があります「imagekeyを。」例えば、結果は

{"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に多くを見つけることを抱えているだろう。

答えて

3

これはあなたがやろうとしていることですか?

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既にimagekeyキーを含むJSON構造内のオブジェクトにviewurlキー/値を追加します。だから、あなたは必要であればimages内の項目に、より具体的なものを使用する必要があります。

ああ、あなたが戻ってJSON文字列にそれをエンコードしたい場合、あなたはちょうどあなたが/エンコーディングをデコードしているデータの量によっては

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

に最後の行を変更することができ、私はお勧めしますcjsonを使用してデータを再エンコードする可能性。 simplejson/jsonに比べて雷が速いです。残念ながら、それはobject_hookのようなものをサポートしていません。

+0

感謝を!私はそれが何か簡単だと分かっていました。私はのsimplejsonの詳細情報を見つけることができるどこかのチャンスごとにありますか? –

+1

ドキュメントのページはかなりそれです... http://simplejson.googlecode.com/svn/tags/simplejson-2.1.1/docs/index.html – sberry

0

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

1

私は考えることができる最も簡単な方法は、ネイティブのpythonに-serialzeを解除するためのsimplejsonを使用するネイティブのpythonを変更し、戻ってJSONにそれをシリアル化することです。

2

は、私が最も簡単な方法は、パイソンにそれを取得し、それを操作して、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) 
関連する問題