如何在没有键但只有Integer / String值时解析JSON?

时间:2017-07-26 10:48:10

标签: ios json swift3

如何解析this JSON文件?当密钥和值都可用时,我的代码正在工作。

到目前为止我的代码:

let url = URL(string: "http://uhunt.felix-halim.net/api/uname2uid/felix_halim")
let task = URLSession.shared.dataTask(with: url!, completionHandler: {
    (data, response, error) in
    print("Task Started")

    if error != nil {
        print("In Error!")
    } else {
        if let content = data {
            do {
                let myJSON =
                    try JSONSerialization.jsonObject(with: content, options: .mutableContainers) as AnyObject
                print(myJSON)
            } catch {
                print("In Catch!")
            }
        }
    }
})
task.resume()
print("Finished")

2 个答案:

答案 0 :(得分:3)

这个答案不正确。有可能像在vadian post

那样参与Int等

这不是json对象格式规范。 JSON数据必须以" {"对象 或" ["对于元素数组。

http://www.json.org/

所以,如果你有不同的格式我会建议:

检查第一个字母。如果" {"解析为对象。

检查第一个字母。如果" ["解析为数组。

否则:

只需将String转换为Int,就像这样:

var num = Int("339")

如果不使用简单的字符串。

答案 1 :(得分:3)

如果JSON的根对象不是字典或数组,则必须将.allowFragments作为选项传递(顺便说一句,从不传递.mutableContainers,这在Swift中没有意义)

let url = URL(string: "http://uhunt.felix-halim.net/api/uname2uid/felix_halim")!
let task = URLSession.shared.dataTask(with: url) { data, response, error in
    print("Task Started")

    guard error == nil else {
        print("In Error!", error!)
        return
    }

    do {
        if let myJSON = try JSONSerialization.jsonObject(with: data!, options: .allowFragments) as? Int {
            print(myJSON)
        }
    } catch {
        print("In Catch!", error)
    }

}
task.resume()
print("Finished")