web-dev-qa-db-ja.com

PythonでJSONを解析する

私のプロジェクトは現在、pythonでJSONメッセージを受信して​​います。このメッセージから情報を得る必要があります。この目的のために、文字列内の単純なJSONに設定しましょう。

jsonStr = '{"one" : "1", "two" : "2", "three" : "3"}'

これまではリストを使ってJSONリクエストを生成してからjson.dumpsを生成してきましたが、これとは逆にするにはjson.loadsを使用する必要があると思いますが、あまりうまくいっていません。上記の例で「2」を入力して「2」を返すスニペットを誰かに提供できますか。

225
ingh.am

とても簡単

import json
j = json.loads('{"one" : "1", "two" : "2", "three" : "3"}')
print j['two']
409
John Giotta

時々あなたのJSONは文字列ではありません。たとえば、次のようなURLからJSONを取得しているとします。

j = urllib2.urlopen('http://site.com/data.json')

json.loadsではなくjson.loadを使用する必要があります。

j_obj = json.load(j)

(忘れがちです: 's'は 'string'用です)

74
jisaacstone

URLまたはFIleの場合は、json.load()を使用してください。 .jsonコンテンツを持つ文字列の場合は、json.loads()を使用してください。

#! /usr/bin/python

import json
from pprint import pprint

#json_file='a.json' 
json_file='my_cube.json'
cube='1'

json_data=open(json_file)
data = json.load(json_data)
#pprint(data)
json_data.close()

print "Dimension: ", data['cubes'][cube]['dim']
print "Measures:  ", data['cubes'][cube]['meas']

以下は、役に立つかもしれない簡単な例です。

json_string = """
{
    "pk": 1, 
    "fa": "cc.ee", 
    "fb": {
        "fc": "", 
        "fd_id": "12345"
    }
}"""

import json
data = json.loads(json_string)
if data["fa"] == "cc.ee":
    data["fb"]["new_key"] = "cc.ee was present!"

print json.dumps(data)

上記のコードの出力は次のようになります。

{"pk": 1, "fb": {"new_key": "cc.ee was present!", "fd_id": "12345", 
 "fc": ""}, "fa": "cc.ee"}

それを印刷するためにdumpのident引数を設定できることに注意してください(例えば、print json.dumps(data、indent = 4)を使用するとき):

{
    "pk": 1, 
    "fb": {
        "new_key": "cc.ee was present!", 
        "fd_id": "12345", 
        "fc": ""
    }, 
    "fa": "cc.ee"
}
24
Venkat