如何快速获取特定的json值

时间:2019-03-08 11:15:52

标签: json swift

我想要json对象中的大小值,但问题是我正在获取整个json数据,我只希望打印大小值

这是我的json

[{
   size = {
    height = 20
    width = 10
    },
    number = 100
}]

这是我的代码

     do{
            let Json = try JSONSerialization.jsonObject(with: data!, options: .mutableContainers)
            //print(Json as Any)

            guard let newValue = Json as? [[String: Any]] else {
                print("invalid format")
                return
            }
            print(newValue)

        }catch {
            print("Response Not Found.")
         }

3 个答案:

答案 0 :(得分:3)

请学习阅读JSON,这非常简单,只有两种收集类型:

  • []是数组,Swift [Any],但是在几乎所有情况下,[[String:Any]]都是通过索引订阅访问的。
  • {}是字典,Swift [String:Any],可通过密钥订阅进行访问

从不使用Swift中的mutableContainers选项,它根本没有任何作用。

if let json = try JSONSerialization.jsonObject(with: data!) as? [[String:Any]] {
    for item in json {
        if let size = item["size"] as? [String:Any] {
            print(size["height"], size["width"])
        }
    }
}

变量名应该以小写字母开头。

PS:您必须强制转换heightwidth的类型。输出(实际上是不是 JSON)是不明确的,您无法查看该值是String还是Int

答案 1 :(得分:0)

您只需要从newValue中提取大小即可。试试这个

do  {
        let Json = try JSONSerialization.jsonObject(with: data!, options: .mutableContainers)
        guard let newValue = Json as? [[String: Any]],
            let size = newValue[0]["size"] as? [String:Any] else {
                return
        }
        print(size)
    }
    catch {
        print("Response Not Found.")
    }

答案 2 :(得分:-2)

guard let newValue = Json as? [[String: Any]] else {
     print("invalid format")
     return
}
print(newValue["size"]) 

或者如果您想要高度和宽度

var sizeDict = newValue["size"] as! [String:Any]

print("Width - \(sizeDict["width"])")
print("Width - \(sizeDict["height"])")