【发布时间】:2013-03-11 18:04:55
【问题描述】:
我需要将包含 JSON 格式文本的 UTF-8 数据文件中的一些文本加载到 JSON 对象中,然后对其进行解析。我无法控制文件的内容或格式,必须处理给我的内容。我也无法控制 Python 版本,即 2.7。
此文本文件中至少有一个值包含\n。因此,运行脚本会导致如下错误: Expecting , delimiter: line 8 column 102 (char 470)'
文件内容如下:
{
"key1": "Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
"key2": "Suspendisse eu tincidunt velit. Proin mollis ligula a arcu feugiat ac imperdiet nunc sagittis. Etiam egestas fringilla tristique.\nCurabitur interdum dolor eu velit gravida et convallis purus facilisis. Aenean eu enim mi.",
"key3": "Nunc intérdum mågna nec nîbh faucibus non laoreet nisi blandit. Nunc lobortis ligula ut tellus semper in hendrerit mauris malesuada.",
"key4": "Vivamus erat turpis, fringilla id sollicitudin non, pellentesque vel lacus. Praesent placerat dapibus mauris vel hendrerit. Integer a augue leo, facilisis viverra dui. Maecenas sollicitudin adipiscing viverra. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam vestibulum commodo diam, vitae ultrices quam viverra eu. Proin eros sapien, scelerisque non condimentum vel, placerat at est. Ut fermentum mattis lacus, a eleifend ipsum euismod ac. Quisque mollis bibendum quam nec sollicitudin."
}
相关代码:
def processText(stringData):
j = json.loads(data, encoding='utf-8')
# do stuff that I can't change
dataFile = codecs.open('/path/to/file', 'r', 'utf-8')
data = dataFile.read()
dataFile.close()
processText(data)
我尝试了以下方法:
-
json.loads(data.replace('\n','\\n')文本文件包含 ~15,000 字符,所以这只会导致脚本挂起。 -
json.loads("%r"%d)其中 d 是包含字符串的变量。这会导致错误“无法解码 JSON 对象”,因为它将文件中的每个换行符转换为 \n,这不是需要发生的。
如何将此字符串加载到 JSON 对象中?
【问题讨论】:
-
我无法重现这个。 (如果我这样做
r"""..."""where ... 是你的文件内容,那么我可以json.loads你那里的字符串就好了。) -
这里也一样。 2.7.3 没问题。我打开了包含您提供的 json 的文件,它工作正常。您是否尝试过手动重新创建 json 文件?
-
您介意发布您正在解析的数据文件的第 7-9 行吗?
-
当我使用heredoc (
r"""…""") 进行测试时,它也对我有用。 -
附带说明,当打开文本文件时,请确保您处于通用模式,因此使用 'rU' 而不仅仅是 'r' 作为模式参数。它确保换行符在操作系统中是一致的
标签: python json python-2.7