Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在swift中获取特定的json值_Json_Swift - Fatal编程技术网

如何在swift中获取特定的json值

如何在swift中获取特定的json值,json,swift,Json,Swift,我想要json对象中的大小值,但问题是我得到的是整个json数据,我只想打印大小值 这是我的json [{ size = { height = 20 width = 10 }, number = 100 }] 这是我的密码 do{ let Json = try JSONSerialization.jsonObject(with: data!, options: .mutableContainers)

我想要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.")
         }
或者,如果您需要高度和宽度

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

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

您只需要从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.")
    }

请学习阅读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:您必须转换
高度
宽度
的类型。输出–实际上是而不是JSON–是不明确的,您无法看到值是
String
还是
Int

,您只需获取大小键即可打印大小。为了便于参考,请点击此链接,你能为meMy编写代码吗亲爱的,请先尝试,如果你有任何问题,请告诉我们。。。。我们肯定会帮助你……我得到的是整个json数据,我只想计算valueHey@username000的大小,解析后得到的模型是数组。您需要首先获得该数组的索引,然后到达键值对。您的案例将是newValue[][“Key”]或者您可以尝试使用newValue。首先[“Key”]im GET error不能为“[[String:Any]]”类型的值下标,如果数组中存在“String”类型的索引,则newValue[“size”]将是一个错误。您可以更正您的答案,在newValue{dict[“size”]}中声明相同的.var sizeDict=newValue[0][“size”]foreach stationfor dict。
mutableContainers
选项应该做什么?@Fehniix将结果分配给
NSMutable…
对象是一个与Objective-C相关的选项,在Swift中没有意义。如果结果被分配给一个
let
常量,那么它就毫无意义了。
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"])
        }
    }
}