我能';我不能用Swift解码JSON文件,即使这样我也可以将其读入数据对象

我能';我不能用Swift解码JSON文件,即使这样我也可以将其读入数据对象,json,swift,Json,Swift,我对斯威夫特很陌生。我在Xcode中创建了一个简单的终端应用程序,以了解如何解码JSON文件。即使我能够将文件读入数据对象,我也无法为我的结构解码它: struct Person: Codable { var name: String var surname: String } 这是我的结构: struct Person: Codable { var name: String var surname: String } 以下是我的简单JSON文件: [

我对斯威夫特很陌生。我在Xcode中创建了一个简单的终端应用程序,以了解如何解码JSON文件。即使我能够将文件读入数据对象,我也无法为我的结构解码它:

struct Person: Codable
{
    var name: String
    var surname: String
}
这是我的结构:

struct Person: Codable
{
    var name: String
    var surname: String
}
以下是我的简单JSON文件:

[
    {
        "name": "Abc", 
        "surname": "Def"
    }
]
let url = URL(fileURLWithPath: "/Users/abcd/Documents/test.json")

if let data = try? Data(contentsOf: url)
{
    print(data) // prints size (in bytes) the data correctly 

    if let person = try? JSONDecoder().decode(Person.self, from: data)
    {
        print(person) // did not printed
    }
}
这是我解码JSON文件的Swift代码:

[
    {
        "name": "Abc", 
        "surname": "Def"
    }
]
let url = URL(fileURLWithPath: "/Users/abcd/Documents/test.json")

if let data = try? Data(contentsOf: url)
{
    print(data) // prints size (in bytes) the data correctly 

    if let person = try? JSONDecoder().decode(Person.self, from: data)
    {
        print(person) // did not printed
    }
}

JSON包含一个数组。相应地,您也应该在代码中使用一个:

if let persons = try? JSONDecoder().decode([Person].self, from: data)
    ...

出于某种原因,json是一个数组。从文件中删除周围的括号[],或者将解码更改为
[Person].self
。解码时不要使用
try?
,尤其是在学习swift解码时。用正确的do/catch环绕解码并打印error@JoakimDanielson非常感谢。