我该如何解析这个JSON Pokemon Dictionary? (迅速3)

时间:2016-12-03 06:40:48

标签: json parsing dictionary swift3

我从新版Pokemon API解析JSON数据时遇到问题,特别是"防御"的值。和#34;攻击"。

在Pokemon API v1中很容易......

_.each(userData, function(data, index) {
    data.age = userAge[index].age;
}); 

在Pokemon API v2中,我有 JSON格式的问题

//JSON:
"attack": 45,
"defense": 65

//After parsing in Alamofire i'm got the next solution:
if let dict = response.result.value as? Dictionary<String, AnyObject> {

            if let attack = dict["attack"] as? Int {
                self._attack = attack
            }

            if let defense = dict["defense"] as? Int {
                self._defense = defense
            }
            print(self._attack)
            print(self._defense)

我尝试过这个选项,但它不起作用:

//JSON:
"stats": [

    {
        "stat": {
            "url": "http://pokeapi.co/api/v2/stat/3/",
            "name": "defense"
        },
        "effort": 0,
        "base_stat": 45
    },
    {
        "stat": {
            "url": "http://pokeapi.co/api/v2/stat/2/",
            "name": "attack"
        },
        "effort": 0,
        "base_stat": 65
    }
]

请告知,我如何解析并获得&#34;防御&#34;的价值?正确?

2 个答案:

答案 0 :(得分:0)

问题出在这一行if name = stat["defense"] {JSON有密钥namedefense&amp; attack是其值,因此您需要获取其值,并且需要检查它是defense还是attack

if name = stat["name"] as? String, name == "defense" {

}

您也可以像这样减少使用单base_stat获取if let的代码。

if name = stat["name"] as? String, let score = stats[0]["base_stat"] as? Int, name == "defense" {
     print("defense : \(score)")
}

答案 1 :(得分:0)

试试这个

guard let statsNode = dict["stats"] as? [[String: Any]] else { return }

for (index, statNode) in statsNode.enumerated() {

    guard let statValue = statNode["base_stat"] as? Int else { continue }

    switch index {
        case 0:
            self._defense = statValue
        case 1:
            self._attack = statValue
        case 2:
            self._someStat = statValue
        ....
        default:
            break
    }

}
print(self._attack)
print(self._defense)

当我开始使用iOS开发时,我参与了一个类似的项目。 这些天我更喜欢使用let let语句来解析JSON以解析我的项目中需要的信息

我还假设因为stats节点是一个数组,攻击,防御,特殊攻击,特殊防御,速度和HP的顺序不会改变所以switch语句是在这种情况下使用的合适工具。

在返回之前放置一个print语句并继续在guard语句的else块中查看你是否点击了程序中的其他块也可能会有所帮助。