【问题标题】:Cannot convert JSON to the correct format无法将 JSON 转换为正确的格式
【发布时间】:2015-08-20 06:10:45
【问题描述】:

我想使用来自公共 Web 服务 https://api.rbp-zp.cz/1.3/services/district/ 的 JSON 输出,但在这种情况下,编码似乎存在问题。 AFNetworking 用于在这种情况下进行转换(通过特定的 respondSerializer),如下所示:

var op = AFHTTPRequestOperation (request: request)
        op.responseSerializer = AFJSONResponseSerializer()

但由于 JSON 结构无效而失败。

我尝试过自己进行转换,但没有结果

let rObject: AnyObject? = NSJSONSerialization.JSONObjectWithData(decodedData, options:.AllowFragments, error: nil)

当我手动将此 JSON 从浏览器放入验证器 http://jsonlint.com 时,它说它的格式不正确。

奇怪的是,当我将日志中的 JSON 消息放入验证器时,结构是有效的。

任何帮助将不胜感激。

【问题讨论】:

  • json 文本末尾的  符号是什么?
  • @Shoaib 你告诉我 :) 这很可能是编码混乱
  • 把json文本末尾的“”去掉那么就是合法的json就会被转换过来。
  • @Vanya 这个问题属于服务器端,但不知道你是否可以访问web服务代码。
  • @Shoaib 你确定它在服务器端吗?我无法访问那里,但我可以让他们知道这方面存在问题。只是想确定一下。

标签: ios json swift web-services character-encoding


【解决方案1】:
func convertStringToDictionary(text: String) -> [String:String]? {
    if let data = text.dataUsingEncoding(NSUTF8StringEncoding) {
        var error: NSError?
        let json = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.allZeros, error: &error) as? [String:String]
        if error != nil {
            println(error)
        }
        return json
    }
    return nil
}

let str = "{\"name\":\"James\"}"

let result = convertStringToDictionary(str) // ["name": "James"]

if let name = result?["name"] { // The `?` is here because our `convertStringToDictionary` function returns an Optional
    println(name) // "James"
}

在您的版本中,您没有将正确的参数传递给 NSJSONSerialization 并忘记转换结果。此外,最好检查可能的错误。最后一点:这仅在您的值是字符串时才有效。如果它可以是另一种类型,最好像这样声明字典转换:

let json = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.allZeros, error: &error) as? [String:AnyObject]

当然你还需要改变函数的返回类型:

func convertStringToDictionary(text: String) -> [String:AnyObject]? { ... }

【讨论】:

【解决方案2】:

好的,所以解决方法是最后修剪那些有趣的字符,..不太喜欢它但有效

let range:NSRange  = NSMakeRange(0, res.length - 3);
let refinedData:NSData = res.subdataWithRange(range)

let resObject = NSJSONSerialization.JSONObjectWithData(refinedData, options:NSJSONReadingOptions.allZeros, error: &error) as! NSArray

resObject 现在被正确填充为 NSArray

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    • 2014-03-04
    • 1970-01-01
    • 2016-06-26
    • 2023-03-22
    相关资源
    最近更新 更多