【问题标题】:How to parse JSON when there is no key but only an Integer / String value?当没有键但只有整数/字符串值时如何解析 JSON?
【发布时间】:2025-12-28 21:45:06
【问题描述】:

如何解析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")

【问题讨论】:

  • 您可以将 myJson 转换为 int。
  • 怎么样? @luckyShubhra
  • Vadian 已经给出了解释。 if let myJSON = try JSONSerialization.jsonObject(with: data!, options: .allowFragments) as?诠释
  • 哦,是的!我以为你还有另一个答案,谢谢@luckyShubhra
  • 当我添加评论时,ans 还不可见。刷新标签后可见。那是不包括ans。

标签: ios json swift3


【解决方案1】:

此答案不正确。可以像在 vadian 帖子中那样解析 Int 等

这不是 json 对象格式规范。 JSON 数据必须以“{”开头表示对象 或“[”表示元素数组。

http://www.json.org/

所以,如果您有不同的格式,我建议您这样做:

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

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

否则:

只需将 String 转换为 Int,如下所示:

var num = Int("339")

如果不使用简单字符串。

【讨论】:

  • 但是当我试图保存文件时,建议的默认格式是 JSON,顺便说一句。 .有没有办法从这里获取数据? @维亚切斯拉夫
  • @Roy ,检查第一个符号。如果是 { 或 [ 则由 JSON 解析器解析。否则尝试像 int (double) 一样解析。如果不使用简单的字符串。
  • 错了。 JSON 数据可能只包含一个字符串或整数。
  • @vadian ,好的。我会更改答案以改进
  • 是的,我在json.org 看到过类似的内容,您有什么答案吗? @vadian
【解决方案2】:

如果 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")

【讨论】: