SwiftyJSON解析json查询

时间:2016-12-09 01:50:10

标签: ios json swift3 xcode8 swifty-json

我正在swift 3中编写一个代码,用于解析来自http请求的json格式的查询。

json格式为:

JSON: {
base = stations;
coord =     {
    lat = "23.9";
    lon = "42.89";
};
weather =     (
            {
        description = mist;
        icon = 50n;
        id = 701;
        main = Mist;
    },
            {
        description = fog;
        icon = 50n;
        id = 741;
        main = Fog;
    }
);
wind =     {
    deg = "222.506";
    speed = "1.72";
};}

我的代码是:

Alamofire.request(url).responseJSON { response in

        if let a = response.result.value  {

            let jsonVar = JSON(a)

            if let resDati = jsonVar["base"].string {
                print(resDati as String)  // <- OK
            }

            if let dati2 = jsonVar["weather"].array {

                for item in dati2 {

                    print(" > \(item["main"])") // <- OK

                }

            }

        } else {
            print(Error.self)
        }

    }

问题出在我所尝试的“coord”和“wind”数据上:

if let dati4 = jsonVar["wind"].array {

    for item in dati4 {

        print("-- \(item)")

    } }

我无法以json格式打印“wind”和“coord”的数据亲属。

我该如何解决这个问题。

谢谢。

1 个答案:

答案 0 :(得分:2)

wind包含字典,而不是数组,您可以使用此代码使用SwiftyJSON获取degspeed值:

if let wind = jsonVar["wind"].dictionary,
    let deg = wind["deg"]?.double,
    let speed = wind["speed"]?.double {
    print(deg, speed)
}

coord相应地运作

if let coord = jsonVar["coord"].dictionary,
    let lat = coord["lat"]?.double,
    let lon = coord["lon"]?.double {
    print(lat, lon)
}

注意:所有值都是Double类型, json格式具有误导性。