我使用python的数据分析书中有一行代码。
return = [json.loads(line) for line in open(path)]
Path是指定的文本文件,里面有JSON格式的文本。
ValueError Traceback (most recent call last)
<ipython-input-35-b1e0b494454a> in <module>()
----> 1 records = [json.loads(line) for line in open(path)]
<ipython-input-35-b1e0b494454a> in <listcomp>(.0)
----> 1 records = [json.loads(line) for line in open(path)]
/usr/lib/python3.4/json/__init__.py in loads(s, encoding, cls, object_hook, parse_float, parse_int, parse_constant, object_pairs_hook, **kw)
316 parse_int is None and parse_float is None and
317 parse_constant is None and object_pairs_hook is None and not kw):
--> 318 return _default_decoder.decode(s)
319 if cls is None:
320 cls = JSONDecoder
/usr/lib/python3.4/json/decoder.py in decode(self, s, _w)
341
342 """
--> 343 obj, end = self.raw_decode(s, idx=_w(s, 0).end())
344 end = _w(s, end).end()
345 if end != len(s):
/usr/lib/python3.4/json/decoder.py in raw_decode(self, s, idx)
359 obj, end = self.scan_once(s, idx)
360 except StopIteration as err:
--> 361 raise ValueError(errmsg("Expecting value", s, err.value)) from None
362 return obj, end
ValueError: Expecting value: line 2 column 1 (char 1)
感谢任何帮助。
答案 0 :(得分:0)
如您在跟踪中所述,返回的值是None类型。 Null,没有什么可以回来的。仔细检查您的来源。
答案 1 :(得分:0)
第2行以
开头"a": "GoogleMaps\/RochesterNY",
第1行,其他行以
开头“a”:“Mozilla / 5.0(Windows NT 6.1; WOW64)AppleWebKit / 535.11(KHTML,与Gecko一样)Chrome / 17.0.963.78 Safari / 535.11”,
似乎“a”键应该是浏览器类型的指示符,而不是URL描述。当您尝试解码时,这可能会导致问题。我建议将其从数据中删除,看看会发生什么。
致电
--> 343 obj, end = self.raw_decode(s, idx=_w(s, 0).end())
似乎有误。您是否编写了自己的raw_decode()版本作为Python JSON手册](https://docs.python.org/3/library/json.html)声明
raw_decode(S)
从s解码JSON文档(以JSON文档开头的str)和 返回Python表示的2元组和 文档结束的索引。
这可用于从可能具有的字符串解码JSON文档 最后的无关数据。
表示ext不是标准函数的有效参数。最好用不同的名称编写自己的函数,以防止意外使用。
同样,你最好还是写你的for循环
records = [json.loads(line) for line in open(path)]
如 for open in line(path): records = [json.loads(line)
但是,考虑到似乎是从raw_decode引发异常,看起来您尝试解码的行包含错误。您应检查正在处理的数据并处理错误或修复数据。由于它是JSON行,您应该能够打印该行以确定错误是什么。它可能是您的代码或实际的数据行。