我想将 JSON 文件解码为模型对象。不幸的是它没有以正确的方式工作。所以我没有收到错误,但“解码结果”不符合我的期望。 我有以下 JSON 文件,我想在显示的结构中对其进行解码。我已经修剪了 json 文件。为什么我只得到一个“ slider 图像”而不是 5 个(ImagesSlider 的属性图像包含一个仅包含第一个图像/元素的数组)。 我错过了什么?
JSON:
[{"imageSlider" : [{
"image" : [{
"imageId" : "1",
"imageName" : "germany1",
"imageBigName" : "germany1_BIG",
"imageRights" : "Peter"
}],
"image" : [{
"imageId" : "2",
"imageName" : "germany2",
"imageBigName" : "germany2_BIG",
"imageRights" : "Peter"
}],
"image" : [{
"imageId" : "3",
"imageName" : "germany3",
"imageBigName" : "germany3_BIG",
"imageRights" : "Peter"
}],
"image" : [{
"imageId" : "4",
"imageName" : "germany4",
"imageBigName" : "germany4_BIG",
"imageRights" : "Peter"
}],
"image" : [{
"imageId" : "5",
"imageName" : "germany5",
"imageBigName" : "germany5_BIG",
"imageRights" : "Peter"
}]
}]
}]
swift :
struct CountryModel : Decodable, Equatable {
var countryName : String
var inhabitants : String
var capital : String
var currency : String
var imageName : String
var imageSlider: [ImagesSlider]
}
struct ImagesSlider : Decodable, Equatable {
var image: [Image]
}
struct Image : Decodable, Equatable {
var imageId: String
var imageName: String
var imageBigName: String
var imageRights: String
}
解码:
func loadData() -> [CountryModel] {
var data: Data
guard let file = Bundle.main.url(forResource: "data", withExtension: "json") else {
fatalError("Error")
}
data = try! Data(contentsOf: file)
let decoder = JSONDecoder()
return try! decoder.decode([CountryModel].self, from: data)
}
感谢您的帮助...
编辑: 我的问题没有通过链接的问题解决...
最佳答案
json 看起来错误,请记住每个 json 对象应该只有一个唯一键。现在是:
[
{
"imageSlider": [
{
"image": [
{
"imageId": "1",
"imageName": "germany1",
"imageBigName": "germany1_BIG",
"imageRights": "Peter"
}
],
"image": [
{
"imageId": "2",
"imageName": "germany2",
"imageBigName": "germany2_BIG",
"imageRights": "Peter"
}
]
}
]
}
]
它应该是这样的:
[
{
"imageSlider": [
{
"image": [
{
"imageId": "1",
"imageName": "germany1",
"imageBigName": "germany1_BIG",
"imageRights": "Peter"
},
{
"imageId": "2",
"imageName": "germany2",
"imageBigName": "germany2_BIG",
"imageRights": "Peter"
}
]
}
]
}
]
请注意,“germany2”项位于图像数组内部。
let decoder = JSONDecoder()
let jsonData = Data(jsonString.utf8)
do {
let country = try decoder.decode([CountryModel].self, from: jsonData)
print(country[0].imageSlider[0].image.count)
} catch {
print(error.localizedDescription)
}
// Console message
2
关于json - 如何在swift中反序列化JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58250945/