Ios 无法在swift 4中解析JSON

Ios 无法在swift 4中解析JSON,ios,json,swift,parsing,Ios,Json,Swift,Parsing,我在swift 4中无法从JSON中获取值 { "meta": {"expiration": 0,"flags": 33456}, "json": "{\"key\":\"string\",\"value\":{\"failed_attempts\":\"1\"}}", "xattrs": {} } 我试过的代码 if let resultData = responseBody["json"] as? [String: AnyObject]{ if let va

我在swift 4中无法从JSON中获取值

{
    "meta": {"expiration": 0,"flags": 33456},
    "json": "{\"key\":\"string\",\"value\":{\"failed_attempts\":\"1\"}}",
    "xattrs": {}
}
我试过的代码

if let resultData = responseBody["json"] as? [String: AnyObject]{

   if let val = resultData["value"] as? [String: AnyObject]{

      if let attempt = val["failed_attempt"] as? String {
         print(attempt)

         }
    }
}
我曾尝试在第行下方打印,它正确地打印json数组中的所有对象,但当我尝试将返回类型添加为[String:AnyObject]时,它返回nil值。有人能给我一些建议吗

响应[“json”]


AnyObject
替换为
Any
。字典是结构,而不是对象,因此强制转换将失败

我还建议将来学习Codable来处理JSON

编辑:

首先需要将数据序列化为JSON对象。
数据
类不会自动转换为JSON

do {
    let jsonRoot = try JSONSerialization.jsonObject(with: responseBody, options: []) as! [String: Any]
    if let json = jsonRoot["json"] as? [String: Any],
        let val = json["value"] as? [String: Any],
        let attempt = val["failed_attempt"] as? String {
        print(attempt)
    }
} catch {
    print("Invalid data", error)
}

最好的方法是使用
Codable
,这就是为什么我根据您的JSON字符串创建
Codable
结构

JSONString应该是:

let jsonString = """
{ "meta": { "expiration":0, "flags":33456 },
  "json": { "key":"String",
           "value":{ "failed_attempt":"3" },
         },
 "xattrs":{ "someAttribute":"someValue"}
}
"""
以及结构:

struct Response: Codable {
    var meta: MetaData
    var json: JSONResponse
    var xattrs: Xattrs?
}

struct MetaData: Codable {
    var expiration: Int
    var flags: Int
}

struct JSONResponse: Codable {
    var key: String
    var value: JSONValue
}

struct JSONValue: Codable {
    var failed_attempt: String
}

struct Xattrs: Codable {
    var someAttribute: String
}

if let jsonData = jsonString.data(using: .utf8)
{
    let myStruct = try? JSONDecoder().decode(Response.self, from: jsonData)
    print(myStruct?.json.value.failed_attempt)
}

结果数据是什么?您应该使用Swift的Codable4@AliAbbas我对代码进行了编辑以反映resultData。括号[]表明您的JSON在顶层是一个arrayJust从postman处再次运行的查询,实际上是一个花括号。我也尝试过任何结果,但没有返回任何结果。我将尝试了解codable for future。等等,您如何序列化响应?
responseBody
是JSON对象还是从服务器返回的原始数据。Hmm看起来像是服务器提供的原始数据:(@sjgmamer再次检查我的答案,您需要使用
JSONSerialization
将数据转换为字典。