2

次のグーグルクエリからのjson結果を解析しようとしています:

http://www.google.com/ig/calculator?hl=en&q=1USD=?MXN

結果は次のとおりです。

{lhs: "1 U.S. dollar",rhs: "13.3317335 Mexican pesos",error: "",icc: true}

だから私はこれでデコードしようとしています:

import json, urllib2

j=urllib2.urlopen("http://www.google.com/ig/calculator?hl=en&q=1USD=?MXN")
print json.load(j)

しかし、私はこのエラーが発生しています(トレースバック):

Traceback (most recent call last):
  File "/home/rafael/gitSources/PythonConcept/Monpy/negApi.py", line 4, in <module>
    print json.load(j)
  File "/usr/lib/python2.7/json/__init__.py", line 278, in load
    **kw)
  File "/usr/lib/python2.7/json/__init__.py", line 326, in loads
    return _default_decoder.decode(s)
  File "/usr/lib/python2.7/json/decoder.py", line 366, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "/usr/lib/python2.7/json/decoder.py", line 382, in raw_decode
    obj, end = self.scan_once(s, idx)
ValueError: Expecting property name: line 1 column 1 (char 1)
[Finished in 0.6s with exit code 1]

何が間違っているのかわかりません。たくさんのチュートリアルを読んだだけです:/

ありがとう :)!

4

3 に答える 3

2

これは JSON ではありませんが、次のように自分で解析できます。

import ast

resp = '{lhs: "1 U.S. dollar",rhs: "13.3317335 Mexican pesos",error: "",icc: true}'

d = {}
for pair in resp[1:-1].split(','):
    (k,v) = pair.split(':')
    v = v.strip()
    if v == "true":
        v = "True"
    try:
        v = ast.literal_eval(v)
    except:
        print "Couldn't eval " + v
    d[k] = v

print d

フォーマットを json に修正してから、json パーサーを次のように使用することもできます。

import json

resp = '{lhs: "1 U.S. dollar",rhs: "13.3317335 Mexican pesos",error: "",icc: true}'

s = "{"    
for pair in resp[1:-1].split(','):
    (k,v) = pair.split(':')
    s += '"%s" : %s,' % (k,v)
s = s[:-1] + "}"

print json.loads(s)
于 2012-07-11T08:13:32.097 に答える
1

を使用できますrate-exchange.appspot.com。これは Google API を使用しますが、有効な json を返します。

http://rate-exchange.appspot.com/currency?from=USD&to=MXN&q=1
{"to": "MXN", "rate": 12.7523369, "from": "USD", "v": 12.7523369}

で使用する方法は次のrequestsとおりです。

>>> import requests
>>> r = requests.get('http://rate-exchange.appspot.com/currency?from=USD&to=MXN&q=1')
>>> r.json['v']
12.7523369
于 2013-03-05T05:12:09.843 に答える
0

これがあなたがすべきことです:

再輸入

s = '{lhs: "1 U.S. dollar",rhs: "13.3317335 Mexican pesos",error: "",icc: true}'
only_numbers=re.sub(r'[^0-9,.]+', '', s)
m = re.match(r"(\d+..),(\d+.\d+),,", only_numbers)
currency=m.group(2)

出力: 13.3317335

于 2013-03-05T04:54:01.860 に答える