在python中处理.dat文件中的多个jason数组
我对json数据处理还不熟悉,一直都在关注这个问题。我的输入文件中的数据如下所示-在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”) 这些尝试中的每一次都失败了,说明了额外数
[{"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()