解析带有反斜杠的非常大的 JSON 文件(JSON 编码)
Parsing a very large JSON file with backslashes (JSON encoded)
我想从 Python 中的一个非常大的 JSON 文件中获取一些数据。问题是这个文件有超过 15,000,000 列(单行),我不知道如何通过格式设置,因为这个 JSON 文件有很多反斜杠和 starts/ends 带引号。
这是我的 Python 代码:
import json
from pprint import pprint
with open('file.json') as f:
data = json.load(f)
for i in range(0, 2):
pprint("Data output: " + data['ObjectData'][i]['column1'])
当我从那个 JSON 文件中手动复制一个对象并像这样正确格式化它时,这非常有效:
{
"Result": "Result String",
"ObjectData": [
{
"Column 1": "Data",
"Column 2": "Data",
"Column 3": "Data",
"Column 4": "Data",
"Column 5": "Data",
},
{
"Column 1": "Data 2",
"Column 2": "Data 2",
"Column 3": "Data 2",
"Column 4": "Data 2",
"Column 5": "Data 2",
}
]
}
我的输出是这样的,这正是我想要的。
Data output: Data
Data output: Data 2
但这是文件的实际格式,用双引号括起来(为了便于阅读,我在此处设置了格式,但下面粘贴了单行示例):
"{
\"Result\":\"Result String\",
\"ObjectData\":[
{
\"Column 1\":\"Data\",
\"Column 2\":\"Data\",
\"Column 3\":\"Data\",
\"Column 4\":\"Data\",
\"Column 5\":\"Data\"
},
{
\"Column 1\":\"Data 2\",
\"Column 2\":\"Data 2\",
\"Column 3\":\"Data 2\",
\"Column 4\":\"Data 2\",
\"Column 5\":\"Data 2\"
}]}"
文件中的实际情况如下:
"{\"Result\":\"Result String\",\"ObjectData\":[{\"Column 1\":\"Data\",\"Column 2\":\"Data\",\"Column 3\":\"Data\",\"Column 4\":\"Data\",\"Column 5\":\"Data\"},{\"Column 1\":\"Data 2\",\"Column 2\":\"Data 2\",\"Column 3\":\"Data 2\",\"Column 4\":\"Data 2\",\"Column 5\":\"Data 2\"}]}"
我的第一个想法是尝试将代码美化为我想要的格式。但是,正如我提到的那样,它是一个非常大的 JSON 文件,包含 1500 万列,所以它永远 运行 不会崩溃。
有没有更简单的方法来处理这个问题?我一直试图找出我是否遗漏了这里的基本原则,但我从未见过这样格式化的 JSON。
感谢任何指导,非常感谢。
JSON 文件好像被双重编码了。或许你可以
with open('file.json') as f:
decoded_once = json.load(f)
data = json.loads(decoded_once)
仅从那段摘录中很难判断发生了什么。
如果失败,可能是因为外部字符串来自 Python 而不是 ,解决方法是在第一步中使用 ast.literal_eval
:
import ast
with open('file.json') as f:
decoded_once = ast.literal_eval(f.read())
data = json.loads(decoded_once)
我想从 Python 中的一个非常大的 JSON 文件中获取一些数据。问题是这个文件有超过 15,000,000 列(单行),我不知道如何通过格式设置,因为这个 JSON 文件有很多反斜杠和 starts/ends 带引号。
这是我的 Python 代码:
import json
from pprint import pprint
with open('file.json') as f:
data = json.load(f)
for i in range(0, 2):
pprint("Data output: " + data['ObjectData'][i]['column1'])
当我从那个 JSON 文件中手动复制一个对象并像这样正确格式化它时,这非常有效:
{
"Result": "Result String",
"ObjectData": [
{
"Column 1": "Data",
"Column 2": "Data",
"Column 3": "Data",
"Column 4": "Data",
"Column 5": "Data",
},
{
"Column 1": "Data 2",
"Column 2": "Data 2",
"Column 3": "Data 2",
"Column 4": "Data 2",
"Column 5": "Data 2",
}
]
}
我的输出是这样的,这正是我想要的。
Data output: Data
Data output: Data 2
但这是文件的实际格式,用双引号括起来(为了便于阅读,我在此处设置了格式,但下面粘贴了单行示例):
"{
\"Result\":\"Result String\",
\"ObjectData\":[
{
\"Column 1\":\"Data\",
\"Column 2\":\"Data\",
\"Column 3\":\"Data\",
\"Column 4\":\"Data\",
\"Column 5\":\"Data\"
},
{
\"Column 1\":\"Data 2\",
\"Column 2\":\"Data 2\",
\"Column 3\":\"Data 2\",
\"Column 4\":\"Data 2\",
\"Column 5\":\"Data 2\"
}]}"
文件中的实际情况如下:
"{\"Result\":\"Result String\",\"ObjectData\":[{\"Column 1\":\"Data\",\"Column 2\":\"Data\",\"Column 3\":\"Data\",\"Column 4\":\"Data\",\"Column 5\":\"Data\"},{\"Column 1\":\"Data 2\",\"Column 2\":\"Data 2\",\"Column 3\":\"Data 2\",\"Column 4\":\"Data 2\",\"Column 5\":\"Data 2\"}]}"
我的第一个想法是尝试将代码美化为我想要的格式。但是,正如我提到的那样,它是一个非常大的 JSON 文件,包含 1500 万列,所以它永远 运行 不会崩溃。
有没有更简单的方法来处理这个问题?我一直试图找出我是否遗漏了这里的基本原则,但我从未见过这样格式化的 JSON。
感谢任何指导,非常感谢。
JSON 文件好像被双重编码了。或许你可以
with open('file.json') as f:
decoded_once = json.load(f)
data = json.loads(decoded_once)
仅从那段摘录中很难判断发生了什么。
如果失败,可能是因为外部字符串来自 Python 而不是 ,解决方法是在第一步中使用 ast.literal_eval
:
import ast
with open('file.json') as f:
decoded_once = ast.literal_eval(f.read())
data = json.loads(decoded_once)