猿问

使用 Python 在新的 .json 文件中打印每一行 json

我有一个json文件;我需要id从内容中删除密钥,我可以用我的代码来做。


现在我想json在一个新文件中打印文件的每一行,并使用 myjson中的名称作为文件名。


我的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()


繁华开满天机
浏览 290回答 3
3回答

心有法竹

您的示例输入json在每一行上显示一个对象。所以我的解决方案读取每一行并将其转换为python dict(使用json.loads()),从dict(使用dict.pop()如果键不存在静默失败)中删除所需的键并将其转换回字符串(使用json.dumps()),然后将其写入新文件。import jsoninfile = "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编辑:json根据 OP 的评论,显然每一行都应该进入一个单独的新文件。可以这样做,例如:import jsoninfile = "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

芜湖不芜

对于删除,你可以使用这样的东西:import jsonimport sysimport reimport fileinputwith 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节点值

一只斗牛犬

您已导入该json包,但并未使用它。你应该,这很棒。从文件中获取字符串,然后用于json.loads()将字符串加载到 json 对象中。从那里,您可以使用 .json 获取 json 对象的每个元素for key in json_object。
随时随地看视频慕课网APP

相关分类

Python
我要回答