【发布时间】:2021-10-08 03:43:37
【问题描述】:
我有一个应用程序,我应该将本地 JSON 文件中的所有数据解析为我的标签歌曲。有一个 JSON 文件,一个数组,两个数组。例如,我需要在一个视图控制器中使用“循环数据”,在另一个视图控制器中使用“beatloopsdata”。当我运行它时,我遇到了一个错误,数据已损坏。有我的 JSON 文件:
{
"beatpackdata": [
{
"loopsdictionary": [
{
"nameOfLoop": "Away we go",
"nameOfProducer": "Tubular Kingz",
"countOfLoops": "28",
"genreOfLoops": "Lo-fi Hip Hop"
},
{
"nameOfLoop": "Test",
"nameOfProducer": "Testing",
"countOfLoops": "25",
"genreOfLoops": "Lo-fi"
}
]
},
{
"beatloopsdictionary": [
{
"loopName" : "Alien",
"instrument" :"Arp",
"songName" : "alienarpjason.mp3",
"producer" : "Stefan Guy"
},
{
"loopName" : "Big Brake",
"instrument" :"Drums",
"songName" : "BigBrake_Drums_Jason.mp3",
"producer" : "Stefan Guy"
},
{
"loopName" : "Bongo Beats",
"instrument" :"Drums",
"songName" : "BongoBeats_Drums_Jason.mp3",
"producer" : "Stefan Guy"
},
{
"loopName" : "Dreaming",
"instrument" :"Keys",
"songName" : "Dreaming_Keys_Jason.mp3",
"producer" : "Stefan Guy"
},
{
"loopName" : "Funky Groove",
"instrument" :"Bass",
"songName" : "FunkyGroove_Bass_Jason.mp3",
"producer" : "Stefan Guy"
},
{
"loopName" : "Futurist",
"instrument" :"Arp",
"songName" : "Futurist_Arp_Jason.mp3",
"producer" : "Stefan Guy"
},
{
"loopName" : "Hoping for change",
"instrument" :"Arp",
"songName" : "HopingForChange_Arp_Jason.mp3",
"producer" : "Stefan Guy"
},
{
"loopName" : "Manic",
"instrument" :"Bass",
"songName" : "Manic_Bass_Jason.mp3",
"producer" : "Stefan Guy"
},
{
"loopName" : "Sassy",
"instrument" :"Drums",
"songName" : "Sassy_Drums_Jason.mp3",
"producer" : "Stefan Guy"
},
{
"loopName" : "Serious",
"instrument" :"Arp",
"songName" : "Serious_Arp_Jason.mp3",
"producer" : "Stefan Guy"
},
{
"loopName" : "Stable Bricks",
"instrument" :"Bass",
"songName" : "StableBrick_Bass_Jason.mp3",
"producer" : "Stefan Guy"
},
{
"loopName" : "Thump",
"instrument" :"Drums",
"songName" : "Thump_Drums_Jason.mp3",
"producer" : "Stefan Guy"
},
{
"loopName" : "Tropic",
"instrument" :"Drums",
"songName" : "TropicVibe_Drums_Jason.mp3",
"producer" : "Stefan Guy"
}
]
}
]
}
我创建了一个模型,但不确定一切是否正确。我已经尽力了,但这是我第三次使用本地 JSON 文件:
import Foundation
struct BeatData: Codable {
let beatpackdata: [BeatPackData]
}
struct BeatPackData: Codable {
let loopdata: [BeatLoopsData]
let beatloopsdata: [LoopData]
}
struct LoopData: Codable {
let loop_name: String
let Instrument: String
let song_name: String
let producer: String
}
struct BeatLoopsData: Codable {
let nameOfLoop: String
let nameOfProducer: String
let countOfLoops: String
let genreOfLoops: String
}
解析函数:
private func parseJSON() {
guard let path = Bundle.main.path(forResource: "beatpackdata", ofType: "json") else {
return
}
let url = URL(fileURLWithPath: path)
do {
let jsonData = try Data(contentsOf: url)
beatPackData = try JSONDecoder().decode(BeatData.self, from: jsonData)
if let beatPackData = beatPackData {
print(beatPackData)
}
}
catch {
print(error)
}
return
}
}
【问题讨论】:
-
loopdata的值显然是一个字典,所以[]是错误的。将其替换为{}。我会删除所有多余的...data出现,并用 lowerCamelCase 替换snake_case 键。 -
据我了解,需要移动 JSON 文件,但我应该如何在我的模型中重命名它?
-
let loopdata: BeatLoopsData。你的命名真的很混乱。 -
完成,我已将模型中的所有内容重命名,但如何修复 JSON 文件?
-
正如我所说,在键
loopdata的值中,用大括号替换方括号
标签: ios json swift xcode parsing