【问题标题】:Swift: NSJSONSerialization.JSONObjectWithData() fails with JSON utf-8斯威夫特:NSJSONSerialization.JSONObjectWithData() 因 JSON utf-8 而失败
【发布时间】:2016-05-04 09:53:37
【问题描述】:

我的 iOS 应用需要从 utf-8 编码的 DBMS MySQL 下载一些数据,例如:

{"id":"1","id_fish":"5","description_info":"Come ricorda il nome, la colorazione del carapace di questo gambero \u00e9 rosa chiaro, che si fa pi\u00f9 intensa sul dorso. Il corpo \u00e8 leggermente compresso lateralmente e possiede 13 paia di zampe. Raggiunge la lunghezza di 18 cm. Si riproduce in primavere e autunno. ","recognition_info":"La forma del gambero rosa \u00e8 molto simile agli altri decapodi come gambero rosso e lo scampo. Si possono per\u00f2 facilmente differenziare in base alle dimensioni e al colore.","place_info":"Oceano Atlantico, tra Portogallo e Angola e tra Massachusetts e Guyana, e Mar Mediterraneo.","fishing_method":"Rete a strascico","buy_period":"Estate - Inverno"}

这是代码:

if let responseJSON: [[String: String]] = (try? NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions())) as? [[String: String]] {
                completionHandler(success: responseJSON, error:nil)
            }

            else {
                print("Error coding!")
            }

您可以想象,它总是显示“错误编码”,而如果下载的 JSON 只是 ASCII,则一切正常。 我错过了什么?

dataprint(NSString(data: data!, encoding: NSUTF8StringEncoding))的内容是:

Optional({"id":"1","id_fish":"5","description_info":"Come ricorda il nome, la colorazione del carapace di questo gambero \u00e9 rosa chiaro, che si fa pi\u00f9 intensa sul dorso. Il corpo \u00e8 leggermente compresso lateralmente e possiede 13 paia di zampe. Raggiunge la lunghezza di 18 cm. Si riproduce in primavere e autunno. ","recognition_info":"La forma del gambero rosa \u00e8 molto simile agli altri decapodi come gambero rosso e lo scampo. Si possono per\u00f2 facilmente differenziare in base alle dimensioni e al colore.","place_info":"Oceano Atlantico, tra Portogallo e Angola e tra Massachusetts e Guyana, e Mar Mediterraneo.","fishing_method":"Rete a strascico","buy_period":"Estate - Inverno"})

我在php文件中使用utf8_encode()

【问题讨论】:

  • 您是如何获得“数据!”的?
  • 您能否附上一份关于data 中具体内容的日志?我怀疑您的数据源中的 JSON 已损坏。
  • @JanGreve 完成,添加到我的问题中
  • 你能检查一下----选项:NSJSONReadingAllowFragments,因为你的json在字典里。
  • 你能把这些数据提供给 NSString 构造函数,看看会发生什么? php UTF8 有一些问题;)

标签: ios json swift utf-8


【解决方案1】:

您的 JSON 对象是字典 [String: String] 而不是数组 [[String: String]]

我建议使用do - catch

do {
   let responseJSON = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions()) as! [String: String]
   completionHandler(success: responseJSON, error:nil)
} catch let error as NSError {
   completionHandler(success: nil, error:error)
}

【讨论】:

    猜你喜欢
    • 2023-03-07
    • 2017-02-15
    • 2017-07-22
    • 2017-03-24
    • 2016-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多