3

ネットから取得した非常に単純な json 文字列を解析してみます: { "price" : '10.25'}

再生:

import simplejson as json
json_str = """ {"price" : '10.25'} """
json.loads(json_str)

結果:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/pymodules/python2.5/simplejson/__init__.py", line 307, in loads
    return _default_decoder.decode(s)
  File "/usr/lib/pymodules/python2.5/simplejson/decoder.py", line 335, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "/usr/lib/pymodules/python2.5/simplejson/decoder.py", line 353, in raw_decode
    raise ValueError("No JSON object could be decoded")
ValueError: No JSON object could be decoded

ただし、一重引用符を二重引用符に変更すると、動作します.\残念ながら、取得したjsonは上記の例ほど単純ではないため、すべての一重引用符を文字列置換コマンドで置き換えることはできません.

このjsonを解析する正しい方法を知っている人はいますか?

PS私はpython 2.5を使用しています。

どうもありがとう!

4

4 に答える 4

3

{"price" : "10.25"}、JSON には二重引用符のみが含まれます。

一重引用符を含む JSON は無効です (参照: www.jsonlint.com):

Parse error on line 2:
{    "price": '10.25'}
--------------^
Expecting 'STRING', 'NUMBER', 'NULL', 'TRUE', 'FALSE', '{', '['

正規表現の置換を使用して json を修正するか、ast.literal eval を使用して python オブジェクトとしてロードします (または json としてダンプして再度ロードします)。

>>> a = """ {"price" : '10.25'} """
>>> import ast
>>> new_dict = ast.literal_eval(a.strip())
>>> import json
>>> json.dumps(new_dict)
'{"price": "10.25"}'
于 2013-02-05T09:52:22.540 に答える
0

一重引用符は有効な JSON ではないため、simplejson は本来あるべきことを正確に行っています。残念ながら、問題は受け取った JSON です。少しの正規表現が、必要な一重引用符を見つけて置き換えるのに役立たない状況はわかりません。

于 2013-02-05T09:52:44.653 に答える
0

数値のみの場合、または二重引用符で囲む必要がある場合は、値を引用しないでください。したがって、正しい方法は次のとおりです。

import simplejson as json
json_str = """ {"price" : 10.25} """
json.loads(json_str)

そして、それを置き換えるには、たとえば finditer を使用して、json文字列を正規表現で解析できます

于 2013-02-05T09:54:00.390 に答える
0

json.orgで有効な JSON 形式を確認してください。

ご覧のとおり、文字列 (辞書のキー) にはダブル クォーテーションのみが有効です。

于 2013-02-05T09:58:54.570 に答える