在python中处理.dat文件中的多个jason数组

在python中处理.dat文件中的多个jason数组,python,json,python-3.x,Python,Json,Python 3.x,我对json数据处理还不熟悉,一直都在关注这个问题。我的输入文件中的数据如下所示- [{"key1":"value1"},{"key2":"value2"}] [{"key3":"value3"},{"key4":"value4"}] 我试着用英语阅读 json.load(file) 或者 with open(file) as f: json.loads(f) 尝试使用pandas.read_json(file,orient=“records”) 这些尝试中的每一次都失败了,说明了额外数

我对json数据处理还不熟悉,一直都在关注这个问题。我的输入文件中的数据如下所示-

[{"key1":"value1"},{"key2":"value2"}] [{"key3":"value3"},{"key4":"value4"}]
我试着用英语阅读

json.load(file)
或者

with open(file) as f:
 json.loads(f)
尝试使用pandas.read_json(file,orient=“records”)

这些尝试中的每一次都失败了,说明了
额外数据:第1行第n列(char n)
问题

有人能指导如何最好地解析这个文件吗?我不赞成编写一个手动解析器,它以后可能无法扩展

另外,两个阵列之间没有

TIA

您测试的是从一个结构中读取,该结构对应于JSON文件(根据定义是文本,而不是Python数据结构)

测试:

file = '[{"key1":"value1"},{"key2":"value2"}],[{"key3":"value3"},{"key4":"value4"}]'
这应该更有效。但是等等。。。您似乎没有在您的待JSON的顶层提供列表或dict!因此出现了错误:

ValueError:额外数据:第1行第38列-第1行第76列(字符37- 75)

然后将其更改为(注意开头和结尾处的附加列表开始和结束括号):

这将有助于:

json.load(file)
使用:

with open(file) as f:
 json.loads(f)
因为您的文本变量不是文件!您可能希望将名为
file
的变量的内容存储到一个文件中,并传递该文件的路径:

with open(r'C:\temp\myfile.json') as f:
 json.loads(f)

使代码正常工作。

您的Json文件内容有问题

1。如果阵列之间存在

代码:

您的文件内容可以是其中之一

备选案文1: 为json内容使用最外层的方括号

[[{key1:“value1”},{key2:“value2”}],{key3:“value3”}, {“key4”:“value4”}]]

备选案文2: 只使用一个方括号

[{“key1”:“value1”},{“key2”:“value2”},{“key3”:“value3”}, {“key4”:“value4”}]

2。如果阵列之间没有

代码: 只是按照给定的JSON格式编写

def valid_json_creator(given):
    replaced = given.replace("}] [{", "}],[{")
    return "[" + replaced + "]"


def read_json():
    with open("data.txt") as fp:
        data = fp.read()
    valid_json = valid_json_creator(data)
    jobj = json.loads(valid_json)
    print(jobj)


if __name__ == '__main__':
    read_json()
如果JSON采用以下格式,则此代码适用于JSON

注意没有
在数组之间,但是有空间

[{“key0”:“value0”},{“key1”:“value41”}] [{“key1”:“value1”},{“key2”:“value42”}] [{“key2”:“value2”},{“key3”:“value43”}] [{“key3”:“value3”},{“key4”:“value44”}] [{“key4”:“value4”},{“key5”:“value45”}] [{“key5”:“value5”},{“key6”:“value46”}] [{“key6”:“value6”},{“key7”:“value47”}] [{“key7”:“value7”},{“key8”:“value48”}] [{“键8”:“值8”},{“键9”:“值49”}] [{“key9”:“value9”},{“key10”:“value410”}] [{“key10”:“value10”},{“key11”:“value411”}] [{“key11”:“value11”},{“key12”:“value412”}] [{“key12”:“value12”},{“key13”:“value413”}] [{“key13”:“value13”},{“key14”:“value414”}] [{“key14”:“value14”},{“key15”:“value415”}] [{“key15”:“value15”},{“key16”:“value416”}] [{“key16”:“value16”},{“key17”:“value417”}] [{“key17”:“value17”},{“key18”:“value418”}] [{“key18”:“value18”},{“key19”:“value419”}] [{“key19”:“value19”},{“key20”:“value420”}]


您似乎命名了一个变量
file
,但该变量并不能使其成为您可以使用
open
读取的文件。这仍然是一个文本变量。用于显示我的文件包含的内容。。将对其进行更正
json.load
将采用文件指针输入,而
json.load
将采用字符串作为输入。我编辑了我的文件,将
[]
放在最外层的括号中,仍然得到此错误
期望值:第1行第1列(字符0)
请注意数组之间没有
请注意数组之间没有
,请注意
在ArraySoh..之间。。!这又是一个好的观点谢谢你指点我。@CARTman:你希望文件的格式相同,数组之间没有逗号吗?
import json

with open("my.json") as fp:
    data = json.load(fp)  # data = json.loads(fp.read())

print data
def valid_json_creator(given):
    replaced = given.replace("}] [{", "}],[{")
    return "[" + replaced + "]"


def read_json():
    with open("data.txt") as fp:
        data = fp.read()
    valid_json = valid_json_creator(data)
    jobj = json.loads(valid_json)
    print(jobj)


if __name__ == '__main__':
    read_json()