从多个 JSON 文件中保存选择的字段到新 JSON

1 投票
1 回答
1705 浏览
提问于 2025-04-18 14:52

我一直在尝试把从一些JSON文件中选出的3个字段保存到一个新的JSON文件里,这个新文件会包含所有这些字段。我知道我离成功很近,但我下面提供的代码只保存了最后一个JSON文件的字段(可能是因为它覆盖了之前保存的所有其他条目)。我这种C语言思维的方式让我无法解决这个可能很简单的问题。

理想情况下,如果我能在每次循环中,抓取到这3个我关心的字段后,立即把它们保存到一个叫做output.json的新文件里,那就太好了,这样可以避免浪费内存,而不是先存起来再保存到文件。有没有什么好主意?

import os
import glob
import json
import numpy
import csv
import pickle
import nltk
import math
from nltk.corpus import stopwords
from nltk import PorterStemmer

stop = stopwords.words('english')
stemmer=PorterStemmer()
dic = {}
final = []

for name in glob.glob('/Users/jorjis/Desktop/test/*'):
    jfile = open(name, 'r')
    values = json.load(jfile)
    jfile.close()
    data = values['article']['body']
    data = data.split('\n\n')
    desc = values['article']['description']
    title = values['article']['title']
    final.append(data)
    dic={'title': title, 'description': desc, 'paragraphs': data}

# get json string from that dictionary
json=json.dumps(dic)
print json

1 个回答

1

没错,你的理解差不多了——你是把变量 data 加到 final 列表里,而不是 dic,而且你只把 dic 转换成了 json。看看下面代码片段的最后五行,注意一下那些改动。

import os
import glob
import json
import numpy
import csv
import pickle
import nltk
import math
from nltk.corpus import stopwords
from nltk import PorterStemmer

stop = stopwords.words('english')
stemmer=PorterStemmer()
dic = {}
final = []

for name in glob.glob('/Users/jorjis/Desktop/test/*'):
    with open(name, 'r') as jfile:
        values = json.load(jfile)
    data = values['article']['body'].split('\n\n')
    desc = values['article']['description']
    title = values['article']['title']
    dic={'title': title, 'description': desc, 'paragraphs': data}
    final.append(dic)

# get json string from that dictionary
jsondata = json.dumps(final)
print jsondata

撰写回答