在python中加载Json文件[重复]

pftdvrlh  于 2023-01-29  发布在  Python
关注(0)|答案(3)|浏览(135)
    • 此问题在此处已有答案**:

Loading JSONL file as JSON objects(5个答案)
How can I diagnose common errors in JSON data?(1个答案)
21分钟前就关门了。
我试着用这段代码在panda中加载一个JSON文件,我在第一行看到了这个错误。我认为json结构中也有同样的错误,因为我也试过用pd.read_json加载,但没有成功。这里出了什么问题?

Name_file='data582750.txt'
l=[]
with open(Name_file) as f:
    for line in f:
        l.append(line)
data = json.loads(l)
json_normalize(data)

我得到这个错误:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-64-c050037c7cb9> in <module>()
----> 1 data = json.loads(l)
C:\Users\demighaa\AppData\Local\Continuum\Anaconda2\lib\json\__init__.pyc in loads(s, encoding, cls, object_hook, parse_float, parse_int, parse_constant, object_pairs_hook, **kw)

    337             parse_int is None and parse_float is None and
    338             parse_constant is None and object_pairs_hook is None and not kw):
--> 339         return _default_decoder.decode(s)
    340     if cls is None:
    341         cls = JSONDecoder

C:\Users\demighaa\AppData\Local\Continuum\Anaconda2\lib\json\decoder.pyc in decode(self, s, _w)
    362 
    363         """
--> 364         obj, end = self.raw_decode(s, idx=_w(s, 0).end())
    365         end = _w(s, end).end()
    366         if end != len(s): 

TypeError: expected string or buffer

文件中的第一行是:

'{"Operator":0,"Device":"F0FCC","Time":1494854190,"FormattedTime":"2017-05-15 15:16:30 +0200 CEST","Data":"042911e3c78f2193262c58b2","JSONDecodedData":"{"Service":{"S":{"Typ":0,"Version":2,"Vdd":0},"Cpt":2,"Start":0},"ExtTemperature":[22.25,21.5,21.5,21.5,21.5,22],"Moisture":[50,50,49,49,49,50],"IntTemperature":[0,0,0,0,0,0,0,0,0]}","Snr":"48.21","ComputedLocation":{"Lat":0,"Lng":0},"LinkQuality":"EXCELLENT"}\n'
c9qzyr3d

c9qzyr3d1#

请张贴代码,而不是图片...
无论如何:***从我所看到的***你有一个jsonlines file-每一行都是一个不同的json对象本身的表示。json.loads()需要一个单一的字符串(表示一个单一的json对象),而不是一个list。所以显而易见的解决方案是动态解码json行,而不是传递整个列表,即:

data = []
with open("you/file.ext") as f:
    for line in f:
        data.append(json.loads(line))
json_normalize(data)

编辑:考虑到你的评论,你 * 可能 * 没有jsonlines文件。如果它是一个真实的的json文件,那么就把整个文件内容传递给json.loads(),或者更简单,把文件本身传递给json.load()。在发布之前先读一下那本该死的手册,它会保存每个人的时间:-/

3qpi33ja

3qpi33ja2#

根据图片判断应该是json.loads(l[0]) ... json.loads函数只接受stringbuffer,但您提供的是list

byqmnocz

byqmnocz3#

JSON数据可能有问题!使用JSON验证器验证数据。您可以将日期复制粘贴到jsonlint上,然后检查JSON格式是否正确。

相关问题