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 对象,并返回一个元组,其第一个成员是对象,第二个成员是解码器停止读取的字符串的偏移量。

基本上,您需要读取一个对象,然后将其存储在一个数组中,然后从字符串中读取下一个对象,依此类推,直到您位于字符串的末尾。像这样:

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,您应该尝试在两个对象之间添加逗号。
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 回答