243

私のスクリプトの1つで次のコードを取得しました:

#
# url is defined above.
#
jsonurl = urlopen(url)

#
# While trying to debug, I put this in:
#
print jsonurl

#
# Was hoping text would contain the actual json crap from the URL, but seems not...
#
text = json.loads(jsonurl)
print text

私がやりたいことは{{.....etc.....}}、Firefox に URL をロードしたときに URL に表示されるものをスクリプトに取得して、そこから値を解析できるようにすることです。私はたくさんのグーグルで検索しましたが、Pythonスクリプトのオブジェクトで{{...}}終わるURLから実際に何かを取得する方法については、良い答えが見つかりませんでした..json

4

11 に答える 11

389

URL からデータを取得し、次に呼び出しますjson.loads

Python3 の例:

import urllib.request, json 
with urllib.request.urlopen("http://maps.googleapis.com/maps/api/geocode/json?address=google") as url:
    data = json.loads(url.read().decode())
    print(data)

Python2 の例:

import urllib, json
url = "http://maps.googleapis.com/maps/api/geocode/json?address=google"
response = urllib.urlopen(url)
data = json.loads(response.read())
print data

出力は次のようになります。

{
"results" : [
    {
    "address_components" : [
        {
            "long_name" : "Charleston and Huff",
            "short_name" : "Charleston and Huff",
            "types" : [ "establishment", "point_of_interest" ]
        },
        {
            "long_name" : "Mountain View",
            "short_name" : "Mountain View",
            "types" : [ "locality", "political" ]
        },
        {
...
于 2012-10-18T23:26:29.200 に答える
153

あなたが実際に URL からデータを取得したいと思っていると推測します。

jsonurl = urlopen(url)
text = json.loads(jsonurl.read()) # <-- read from it

または、リクエスト ライブラリの JSON デコーダーを確認てください。

import requests
r = requests.get('someurl')
print r.json() # if response type was set to JSON, then you'll automatically have a JSON response here...
于 2012-10-18T23:26:28.873 に答える
28

Python 3 を使用する場合、これが Web ページから JSON を取得する最も簡単で効率的な方法であることがわかりました。

import json,urllib.request
data = urllib.request.urlopen("https://api.github.com/users?since=100").read()
output = json.loads(data)
print (output)
于 2016-02-23T19:59:52.207 に答える
9

( docsurlopen()によると) への呼び出しが行うことは、ファイルのようなオブジェクトを返すことだけです。それができたら、そのメソッドを呼び出して、実際にネットワーク経由で JSON データをプルする必要があります。read()

何かのようなもの:

jsonurl = urlopen(url)

text = json.loads(jsonurl.read())
print text
于 2012-10-18T23:26:20.263 に答える
5

Python 2 では、json.loads() の代わりに json.load() が機能します。

import json
import urllib

url = 'https://api.github.com/users?since=100'
output = json.load(urllib.urlopen(url))
print(output)

残念ながら、これは Python 3 では機能しません。json.load は、ファイルのようなオブジェクトに対して read() を呼び出す json.loads の単なるラッパーです。json.loads には文字列オブジェクトが必要で、urllib.urlopen(url).read() の出力はバイト オブジェクトです。したがって、Python 3 で動作させるには、ファイルのエンコーディングを取得する必要があります。

この例では、エンコーディングのヘッダーを照会し、取得できない場合は utf-8 にフォールバックします。headers オブジェクトは Python 2 と 3 で異なるため、異なる方法で行う必要があります。requestsを使用すると、これらすべてを回避できますが、標準ライブラリに固執する必要がある場合があります。

import json
from six.moves.urllib.request import urlopen

DEFAULT_ENCODING = 'utf-8'
url = 'https://api.github.com/users?since=100'
urlResponse = urlopen(url)

if hasattr(urlResponse.headers, 'get_content_charset'):
    encoding = urlResponse.headers.get_content_charset(DEFAULT_ENCODING)
else:
    encoding = urlResponse.headers.getparam('charset') or DEFAULT_ENCODING

output = json.loads(urlResponse.read().decode(encoding))
print(output)
于 2016-06-23T15:33:27.363 に答える
3

jsonを解析するために追加のライブラリを使用する必要はありません...

json.loads()辞書を返します。

だからあなたの場合、ちょうどtext["someValueKey"]

于 2013-06-25T21:44:36.160 に答える