我有一个json
文件;我需要从内容中删除id
键,可以使用我的代码进行操作。
现在,我想将json
文件的每一行打印到一个新文件中,并将json
中的文件名用作文件名。
我的json
文件例如:
{"categories":["Test"],"indications":[{"@class":"=indication.BuildLogIndication","pattern":".*TypeError .*"},{"@class":"model.indication.BuildLogIndication","pattern":".*LoadError .*"}],"modifications":[{"time":{"$date":"2015-10-08T20:01:54.075Z"}},{"user":"user1","time":{"$date":"2015-03-04T18:38:58.123Z"}},{"user":"user2","time":{"$date":"2014-11-13T01:54:13.906Z"}},{"time":{"$date":"2014-09-02T18:48:05.000Z"}}],"lastOccurred":{"$date":"2017-01-25T20:05:17.180Z"}}
{"pattern":".*look for this string.*"}],"modifications":[{"time":{"$date":"2014-09-02T18:52:20.000Z"}}],"lastOccurred":{"$date":"2014-11-04T00:43:32.945Z"},"_removed":{"timestamp":{"$date":"2014-11-13T01:52:44.346Z"},"by":"user3"},"active":false}
删除ID的代码:
import json
import sys
import re
import fileinput
infile = "failure.json"
outfile = "failure1.json"
fin = open(infile)
fout = open(outfile, "w+")
for line in fin:
for word in line:
line = re.sub("\"_id.*?},","", line)
fout.write(line)
file.write("%d\n" % n)
fin.close()
fout.close()
答案 0 :(得分:1)
要删除,您可以使用以下内容:
import json
import sys
import re
import fileinput
with open('failure.json') as data_file:
data = json.load(data_file)
del data['_id']
with open('failure2.json', 'w') as data_file:
data = json.dump(data, data_file)
并且为了创建具有id值的文件,只需解析data
对象和id
节点的值
答案 1 :(得分:0)
您的示例输入在每行上显示一个json
对象。
因此,我的解决方案读取每一行并将其转换为python
dict
(使用json.loads()
),从dict
中删除所需的密钥(使用{{3} }(如果没有该密钥,则会无提示地失败),然后将其转换回字符串(使用dict.pop()
),然后将其写入新文件。
import json
infile = "failure.json"
outfile = "failure1.json"
key = '_id'
with open(infile) as f_read:
with open(outfile, 'w') as f_write:
for line in f_read:
line = line.strip()
if len(line) > 0:
try:
elem = json.loads(line)
elem.pop(key, None)
f_write.write('{}\n'.format(json.dumps(elem)))
except json.JSONDecodeError:
pass
编辑:根据OP的评论,显然每一行json
都应放入一个单独的新文件中。例如,可以这样做:
import json
infile = "failure.json"
key_to_remove = '_id'
with open(infile) as f_read:
for line in f_read:
line = line.strip()
if len(line) > 0:
try:
elem = json.loads(line)
elem.pop(key_to_remove, None)
outfile = '{}.json'.format(elem['name']) # this may raise KeyError
with open(outfile, 'w') as f_write:
f_write.write('{}\n'.format(json.dumps(elem)))
except json.JSONDecodeError:
pass
答案 2 :(得分:0)
您已经导入了json
程序包,但没有使用它。您应该,这很棒。
从文件中获取字符串,然后使用json.loads()
将字符串加载到json对象中。从那里,您可以使用for key in json_object
获取json对象的每个元素。