以JSON格式化数据

时间:2015-09-21 13:44:58

标签: python json python-3.x

我正在尝试通过添加逗号分隔的括号来格式化json格式的数据集。目标是将其导出到csv。对于某些记录,数据集在某些字段中有漏洞,如果我直接导​​入它,我会收到错误。

我有这条线

data_json_str = "[" + ','.join(data) + "]"

但是我收到了这个错误

TypeError                                 Traceback (most recent call last)
<ipython-input-4-923cc05f5de6> in <module>()
----> 1 data_json_str = "[" + ','.join(data) + "]"

TypeError: sequence item 0: expected str instance, bytes found

1 个答案:

答案 0 :(得分:0)

我猜你正在使用Python 3。

在Python 3中,有两种字符串格式:str (sequences of Unicode code points)bytes (sequences of bytes)。出于某种原因(比如以二进制模式读取文件),您最终使用bytes而不是data对象中的字符串。这些既不能用作','.join的参数,也不能传递给json.dumps

>>> data = [b'abc', b'def']
>>> data_json_str = "[" + ','.join(data) + "]"
Traceback (most recent call last):
  File "python", line 1, in <module>
TypeError: sequence item 0: expected str instance, bytes found

>>> import json
>>> json.dumps(data)
Traceback (most recent call last):
  File "python", line 1, in <module>
TypeError: b'abc' is not JSON serializable

您必须先将字节转换为unicode字符串。如果您已经知道编码(通常是UTF-8),您可以编写例如:

>>> data = [d.decode('utf-8') for d in data]
>>> data
['abc', 'def']

然后使用字符串连接或(最好)the JSON library将它们转换为JSON字符串。

编辑:从文件中读取的数据可能以字节而不是Unicode保存的一个原因是当您从设置了二进制标志的文件中读取时,即open(filename, 'rb')而不是open(filename 'r') with open('data.txt', 'r') as f: data = f.readlines() 。有关如何在读取文件时更改默认编码的详细信息,请参阅the open function reference

因此,在最佳情况下,数据从文本文件读取为Unicode字符串:

import json
print(json.dumps(data))

然后转换为json:

while (t <= 1f)