用python修改Json文件格式
我有一个格式如下的JSON文件: (为清晰起见,多行) (第0001行) 。。。。 (第9999行) 我想在上面运行一个程序,但是,该程序无法以上述格式读取它。 因此,我想将其格式修改为:用python修改Json文件格式,python,arrays,json,python-import,Python,Arrays,Json,Python Import,我有一个格式如下的JSON文件: (为清晰起见,多行) (第0001行) 。。。。 (第9999行) 我想在上面运行一个程序,但是,该程序无法以上述格式读取它。 因此,我想将其格式修改为: [{ "_id": "iD_0001", "skills": [{ "name": "Project Management" }, { "name": "Business Development" }] },{ "_id":"iD_999
[{
"_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对象列表中进行转换
import json
from pprint import pprint
with open('sample.json') as data_file:
strData = '[' + ''.join(data_file.readlines()).replace('}\n{','},{') + ']'
data = eval(strData)
with open('Test.txt', 'w') as f:
for x in data:
for y in x["skills"]:
f.write(y["name"])
以下是您可以采取的解决问题的步骤。因为这听起来有点像家庭作业,我会给你逻辑和指针,但不是代码
列表
上拆分字符串…
json.load
结果列表的每一部分第一个不是单个JSON文件
json.load
一次只从文件中加载一个对象。第一个是多个JSON对象的链接。请检查:在您的示例文件中,每个记录之间是否有一个文本..
,或者您是否将其作为缩短复制/粘贴的示例?..
用于缩短复制粘贴。不是文字只是一个小小的观察:您的解决方案假设您没有分享关于您的问题的信息(事实上每行有一个json对象)。按照您呈现json示例的方式,我们假设您有\n个字符出现断行。我在上面的注释中引用的解决方案更好,但这也会起作用。不幸的是,这不是一个家庭作业,文件可能会变得太大,无法满足内存限制。不过我明白你的道理了,谢谢!
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()
import json
from pprint import pprint
with open('sample.json') as data_file:
strData = '[' + ''.join(data_file.readlines()).replace('}\n{','},{') + ']'
data = eval(strData)
with open('Test.txt', 'w') as f:
for x in data:
for y in x["skills"]:
f.write(y["name"])