无法在 Swift 中解析 JSON。 “应解码 Dictionary<String, Any>,但找到了一个数组。” [复制]

Posted

技术标签:

【中文标题】无法在 Swift 中解析 JSON。 “应解码 Dictionary<String, Any>,但找到了一个数组。” [复制]【英文标题】:Cannot parse JSON in Swift. "Expected to decode Dictionary<String, Any> but found an array instead." [duplicate] 【发布时间】:2021-11-14 01:52:19 【问题描述】:

我尝试从 JSON 中检索数据。 在我的代码下面有结构:

    private func ParseJSON() 
    guard let path = Bundle.main.path(forResource: "dataDictionary", ofType: "json")
    
    else return
    let url = URL(fileURLWithPath: path)
    
    var result: Result?
    
    do 
        let jsonData = try Data(contentsOf: url)
        result = try JSONDecoder().decode(Result.self, from: jsonData)
        
        if let result = result 
            print(result)
         else 
            print("Failed to parse")
        
        return
    
    catch 
        print("Error:\(error)")
    


struct Phonetic: Codable 
    let text: String?
    let audio: String?


struct Result: Codable 
        let phonetic : String?
        let phonetics : [Phonetic]?
        let word : String?

这是我在 dataDictionary.json 中指定的 JSON 样本:

[
"word": "castle",
"phonetic": "ˈkɑːs(ə)l",
"phonetics": [
    "text": "ˈkɑːs(ə)l",
    "audio": "//ssl.gstatic.com/dictionary/static/sounds/20200429/castle--1_gb_1.mp3"
]

]

请帮助我正确编写结构。

【问题讨论】:

只是因为你的json是数组。您可以将 json 转换为字典,也可以使 result 接受数组。 【参考方案1】:

您的 JSON 是一个数组,因此应该这样处理。

private func ParseJSON() 
    guard let path = Bundle.main.path(
        forResource: "dataDictionary", ofType: "json") else  fatalError() 

    let url = URL(fileURLWithPath: path)
    do 
        let jsonData = try Data(contentsOf: url)
        let result = try JSONDecoder().decode([Result].self, from: jsonData)
        print("Result: \(result)")
     catch 
        print("Error:\(error)")
    

只是一个挑剔,但如果你可以确定你的 JSON 字段是非空的,那么你可以将你的模型属性更改为非可选的:

struct Phonetic: Codable 
    let text: String
    let audio: String


struct Result: Codable 
    let phonetic: String
    let phonetics: [Phonetic]
    let word: String

【讨论】:

以上是关于无法在 Swift 中解析 JSON。 “应解码 Dictionary<String, Any>,但找到了一个数组。” [复制]的主要内容,如果未能解决你的问题,请参考以下文章

Swift:无法解析 JSON 数据 [重复]

无法将 JSON 数据解析为 Swift

如何在 Swift 中解析 JSON 数组?

Swift Alamofire 无法解析 POST 请求中的响应 JSON 字符串

Swift json 解析错误:无法将 NSCFConstantString 类型的值转换为 NSArray

Swift 中的 JSON 解析