无法在python中加载json文件[重复]
Posted
技术标签:
【中文标题】无法在python中加载json文件[重复]【英文标题】:Unable to load json file in python [duplicate] 【发布时间】:2020-04-06 13:35:08 【问题描述】:我正在尝试使用 pandas 库的 read_json() 和 python 的内置 json 库从这个 link 在 python 中加载数据集,用于存储在我的计算机中的相同数据集(与我的笔记本相同的文件夹)。以下是我的代码:
import json
import pandas as pd
path='https://s3.amazonaws.com/istarsshare/normround1.json'
data=pd.read_json(path,orient='columns')
data.head(10)
另一个是:
import json
with open("normround1.json", "r") as read_it:
data = json.load(read_it)
在第一种情况下,我收到以下错误:
ValueError Traceback (most recent call last) <ipython-input-12-a81b255c7afd> in <module>
1 path='https://s3.amazonaws.com/istarsshare/normround1.json'
----> 2 data=pd.read_json(path,orient='columns')
3 data.head(10)
4 #with open("normround1.json", "r") as read_it:
5 #data = json.load(read_it)
~/anaconda3/lib/python3.7/site-packages/pandas/io/json/_json.py in read_json(path_or_buf, orient, typ, dtype, convert_axes, convert_dates, keep_default_dates, numpy, precise_float, date_unit, encoding, lines, chunksize, compression)
590 return json_reader
591
--> 592 result = json_reader.read()
593 if should_close:
594 try:
~/anaconda3/lib/python3.7/site-packages/pandas/io/json/_json.py in read(self)
715 obj = self._get_object_parser(self._combine_lines(data.split("\n")))
716 else:
--> 717 obj = self._get_object_parser(self.data)
718 self.close()
719 return obj
~/anaconda3/lib/python3.7/site-packages/pandas/io/json/_json.py in _get_object_parser(self, json)
737 obj = None
738 if typ == "frame":
--> 739 obj = FrameParser(json, **kwargs).parse()
740
741 if typ == "series" or obj is None:
~/anaconda3/lib/python3.7/site-packages/pandas/io/json/_json.py in parse(self)
847
848 else:
--> 849 self._parse_no_numpy()
850
851 if self.obj is None:
~/anaconda3/lib/python3.7/site-packages/pandas/io/json/_json.py in _parse_no_numpy(self)
1091 if orient == "columns":
1092 self.obj = DataFrame(
-> 1093 loads(json, precise_float=self.precise_float), dtype=None
1094 )
1095 elif orient == "split":
ValueError: Trailing data
在第二种情况下,我得到了:
---------------------------------------------------------------------------
JSONDecodeError Traceback (most recent call last) <ipython-input-13-b4c6a39520ca> in <module>
3 #data.head(10)
4 with open("normround1.json", "r") as read_it:
----> 5 data = json.load(read_it)
~/anaconda3/lib/python3.7/json/__init__.py in load(fp, cls, object_hook, parse_float, parse_int, parse_constant, object_pairs_hook, **kw)
294 cls=cls, object_hook=object_hook,
295 parse_float=parse_float, parse_int=parse_int,
--> 296 parse_constant=parse_constant, object_pairs_hook=object_pairs_hook, **kw)
297
298
~/anaconda3/lib/python3.7/json/__init__.py in loads(s, encoding, cls, object_hook, parse_float, parse_int, parse_constant, object_pairs_hook, **kw)
346 parse_int is None and parse_float is None and
347 parse_constant is None and object_pairs_hook is None and not kw):
--> 348 return _default_decoder.decode(s)
349 if cls is None:
350 cls = JSONDecoder
~/anaconda3/lib/python3.7/json/decoder.py in decode(self, s, _w)
338 end = _w(s, end).end()
339 if end != len(s):
--> 340 raise JSONDecodeError("Extra data", s, end)
341 return obj
342
JSONDecodeError: Extra data: line 2 column 1 (char 161)
我在 Ubuntu 18.04 中使用 jupyter notebook
【问题讨论】:
首先检查文件中的内容。似乎是不正确的json。 我检查了文件——不是 JSON,而是multi-JSON
——每一行都是JSON
。但是标准工具无法读取multi-JSON
,您必须单独获取每一行并用作JSON
【参考方案1】:
不是JSON
文件,而是multi-JSON
文件——每一行都是JSON
数据。
标准工具无法读取,你必须单独获取每一行并用作JSON
import json
data = []
with open('normround1.json') as fh:
for line in fh:
data.append(json.loads(line))
#print(data)
print(data[0]['_id'])
print(data[0]['message'])
【讨论】:
【参考方案2】:我修复了文件进入 vi,这样做(它在每行的末尾添加一个逗号):
:%s/$/,/g
添加然后在文件的开头添加一个 [,在文件的末尾添加一个]。之后我就可以加载它了。
【讨论】:
以上是关于无法在python中加载json文件[重复]的主要内容,如果未能解决你的问题,请参考以下文章
在 python 中加载 JSON 作为实际对象,而不是 dict [重复]