как получить конкретное значение JSON в Swift - PullRequest
1 голос
/ 08 марта 2019

Мне нужно значение размера в объекте 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 ]

3 голосов
/ 08 марта 2019

Пожалуйста, научитесь читать JSON, это довольно просто, есть только два типа коллекций:

  • [] - это массив, Swift [Any], но почти во всех случаях [[String:Any]], доступ к которому осуществляется по подписке индекса.
  • {} - словарь, Swift [String:Any], доступ по ключевой подписке

Никогда не используйте параметр mutableContainers в Swift , он вообще не действует.

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: Вы должны разыграть тип height и width. Вывод - который на самом деле не JSON - неоднозначен, вы не можете видеть, является ли значение String или Int

0 голосов
/ 08 марта 2019

Вам просто нужно извлечь размер из 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.")
    }
0 голосов
/ 08 марта 2019
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"])")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...