1

私は次のデータを持っています:

d = "{\"key_1": \" val_1\", \"key_2\": \"val_2\"}{\"key_3\": \" val_3\", \"key_4\": \"val_4\"}"

これを辞書のリストに翻訳したいのですが、例えば

d_list = [{\"key_1": \" val_1\", \"key_2\": \"val_2\"}, {\"key_3\": \" val_3\", \"key_4\": \"val_4\"}]
  1. json.loads(d)は私にタイプのエラーを与えます:raise ValueError(errmsg( "Extra data"、s、end、len(s)))

助言がありますか?

4

3 に答える 3

5

JSONDecoderとそのraw_decode()方法を 使用して、これを実現できます。raw_decode()完全な JSON オブジェクトを読み取り、最初のメンバーがオブジェクトで、2 番目のメンバーがデコーダーが読み取りを停止した文字列へのオフセットであるタプルを返します。

基本的に、1 つのオブジェクトを読み取り、それを配列に格納し、文字列から次のオブジェクトを読み取るというように、文字列の末尾に到達するまで繰り返します。このような:

import json

def read_json_objects(data):
    decoder = json.JSONDecoder()
    offset = 0

    while offset < len(data):
        item = decoder.raw_decode(data[offset:])

        yield item[0]
        offset += item[1]

d = '{"key_1": " val_1", "key_2": "val_2"}{"key_3": " val_3", "key_4": "val_4"}'

print json.dumps(list(read_json_objects(d)))

これは次のように出力されます:

[{"key_1": " val_1", "key_2": "val_2"}, {"key_4": "val_4", "key_3": " val_3"}]
于 2012-08-01T19:06:23.910 に答える
0

これは有効な JSON ではありません。2 つのオブジェクトの間にコンマを追加してみてください。
d = "{\"key_1": \" val_1\", \"key_2\": \"val_2\"}, {\"key_3\": \" val_3\", \"key_4\": \"val_4\"}"

于 2012-08-01T19:02:50.443 に答える
0

私も同様の問題を抱えていました{key1:val1, key2:val2}{key1:val1, key2:val2}。私がそれを修正できる唯一の方法は次のとおりでした:

def json_parser(msg):
    msg=msg.split("{")
    for i in msg:
        L=i.split("}")
        msg_new={}
        for j in L:
            if j:
                LL=j.split(",")
                for l in LL:
                    msg_new[string.strip(l.split(":")[0]).replace('"','')]=string.strip(l.split(":")[1]).replace('"','')
        return msg_new

どこ....

try:
                        data_loaded=json.loads(data)
                    except:
                        data_loaded=json_parser(str(data))

私は多くの試みを試みましたが、これは多くの{..}{..}{..}例を処理できました。

于 2015-10-13T08:01:28.120 に答える