我可能在这里犯了很多错误。对python和JSON来说很新。 我有多个“歌曲”-JSON对象。我需要从文件中写入和读取。 JSON文件看起来像这样(基本上是一个歌曲对象列表,而不是每行一个!这里只有两个):
[{
"emotions": [],
"lyrics": "2222",
"emotionID": 0,
"artist": "22453232",
"sentimentScore": 0,
"subjects": [],
"synonymKeyWords": [],
"keyWords": []
}, {
"emotions": [],
"lyrics": "244422",
"emotionID": 0,
"artist": "2121222",
"sentimentScore": 0,
"subjects": [],
"synonymKeyWords": [],
"keyWords": []
}]
我想将歌曲对象读入一个列表,以便我可以追加另一个歌曲对象,然后将其写回。我所拥有的显然是错的。请帮忙。
import json
from song import Song
def writeToFile():
lyrics = input( "enter lyrics: " )
artist = input("enter artist name: ")
songObj = Song(lyrics, artist)
print(vars(songObj))
data = []
with open('testWrite.json') as file:
data = json.load(file)
data.append(vars(songObj))
print(data)
with open('testWrite.json', 'w') as file:
json.dump(data, file)
ctr = "y"
while (ctr=="y"):
writeToFile()
ctr = input("continue? y/n?")
也可以打开其他建议,如果我可以避免每次想要添加新歌曲对象时加载所有对象。
答案 0 :(得分:1)
我认为你有几个问题在这里发生。首先,有效的JSON不使用单引号('),它都是双引号(“)。您正在寻找类似的东西:
[{
"id":123,
"emotions":[],
"lyrics":"AbC",
"emotionID":0,
"artist":"222",
"sentimentScore":0,
"subjects":[],
"synonymKeyWords":[],
"keyWords":[]
},
{
"id":123,
"emotions":[],
"lyrics":"EFG",
"emotionID":0,
"artist":"223",
"sentimentScore":0,
"subjects":[],
"synonymKeyWords":[],
"keyWords":[]
}
]
其次,您需要打开json文件进行读取,然后将其加载为json。以下内容适用于您:
with open(read_file) as file:
data = json.load(file)
with open(write_file, 'w') as file:
json.dump(data, file)
print(data)
答案 1 :(得分:0)
data.append(json.loads(f))
这会将您从JSON文件中读取的列表作为单个元素添加到列表中。所以在你的另一个追加之后,列表将有两个元素:一个歌曲列表,以及之后添加的一个歌曲对象。
您应该使用list.extend
扩展包含其他列表中项目的列表:
data.extends(json.loads(f))
由于您的列表在此之前是空的,您也可以从JSON加载列表,然后附加到该列表:
data = json.loads(f)
data.append(vars(songObj))