【发布时间】:2016-03-14 17:18:11
【问题描述】:
我的 JSON 文件格式如下: (为清楚起见多行)
(第 0001 行).......
{
"_id": "iD_0001",
"skills": [{
"name": "Project Management"
}, {
"name": "Business Development"
}]
}
.... (第 9999 行)
{
"_id":"iD_9999",
"skills": [{
"name": "Negotiation"
}, {
"name": "Banking"
}]
}
我想在上面运行一个程序,但是程序在上述格式下无法读取它。 因此,我想将其格式修改为:
[{
"_id": "iD_0001",
"skills": [{
"name": "Project Management"
}, {
"name": "Business Development"
}]
},{
"_id":"iD_9999",
"skills": [{
"name": "Negotiation"
}, {
"name": "Banking"
}]
}]
本质上,将所有条目放在一个数组中。 有没有办法使用 Python 或 demjson 来实现?
替代方案:我制作了一个程序,用于获取这些 json 文件中的技能并将它们发送到文本文件 (Test.txt),但它仅适用于第二种格式,而不适用于第一种格式。您能否建议进行修改以使其适用于第一种格式(上图)? 这是我的程序:
import json
from pprint import pprint
with open('Sample.json') as data_file:
data = json.load(data_file)
with open('Test.txt', 'w') as f:
for x in data:
for y in x["skills"]:
f.write(y["name"])
f.close()
解决方案
感谢 Antti Haapala 注意到第一种格式下 Json 对象的串联,以及 Walter Witzel 和 Josh J 提出的替代答案。 由于第一种格式是单个对象的串联,因此如果我们逐行加载第一个 Json 文件而不是作为一个整体,程序运行良好。我已经做到了:
data = []
with open('Sample1-candidats.json') as data_file:
for line in data_file:
data.append(json.loads(line))
with open('Test.txt', 'w') as f:
for x in data:
for y in x["skills"]:
f.write(y["name"])
f.close()
【问题讨论】:
-
第一个不是单个 JSON 文件。
json.load一次只从文件中加载一个对象。第一个是多个 JSON 对象的串联。 -
在您的示例文件中,每条记录之间是否有文字
.....或者您是否使用它作为示例来缩短复制/粘贴? -
.....是为了缩短复制粘贴。不是字面意思 -
只有一个小观察:您的解决方案假定您没有在您的问题上共享的信息(事实上您每行有一个 json 对象)。您呈现 json 示例的方式,我们假设您有 \n 个字符打破了行。
标签: python arrays json python-import