You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift如何将嵌套JSON全层级转字典并正确显示日文字符

Swift JSON转换问题解决方案

问题1:获取places字段对应的字典数组

你可以通过可选绑定安全转换places字段的类型,避免强制类型转换导致的崩溃,示例代码如下:

let response: String = "{\"places\":[{\"name\":\"東京\",\"date\":\"2005/03/02\",\"transport\":\"新幹線\"},{\"name\":\"北海道\",\"date\":\"2006/04/06\",\"transport\":\"飛行機\"}],\"no_of_person\":\"4\",\"package_name\":\"日本最高\"}"
    
guard let jsonObj = response.data(using: .utf8) else {
    print("字符串转Data失败")
    return
}
do {
    guard let items = try JSONSerialization.jsonObject(with: jsonObj, options: []) as? [String: Any] else {
        print("JSON根节点不是字典类型")
        return
    }
    // 核心转换代码:把places字段转为字典数组
    guard let places = items["places"] as? [[String: Any]] else {
        print("places字段不是字典数组类型")
        return
    }
    // 验证结果:places已经是可以直接使用的字典数组
    for place in places {
        if let name = place["name"] as? String,
           let date = place["date"] as? String,
           let transport = place["transport"] as? String {
            print("地点:\(name),日期:\(date),交通:\(transport)")
        }
    }
} catch {
    print("JSON解析失败:\(error)")
}

问题2:解决嵌套层级日文字符显示为Unicode转义的问题

你遇到的转义问题是打印逻辑导致的,不是数据本身有问题:

  • 直接打印String类型的package_name时,系统直接输出字符串原始值,所以日文显示正常
  • 直接打印嵌套的NSArray/NSDictionary类型时,系统调用的是Objective-C对应的description方法,会自动把非ASCII字符转为Unicode转义序列,但实际存储的日文是正确的,业务取值使用不受影响

如果需要打印完整JSON结构时显示正常日文,可以把解析后的字典重新序列化为格式化JSON字符串再打印,示例代码如下:

do {
    let formattedData = try JSONSerialization.data(withJSONObject: items, options: [.prettyPrinted])
    if let formattedStr = String(data: formattedData, encoding: .utf8) {
        print(formattedStr)
    }
} catch {
    print("JSON格式化失败:\(error)")
}

输出效果如下:

{
  "no_of_person" : "4",
  "package_name" : "日本最高",
  "places" : [
    {
      "name" : "東京",
      "date" : "2005/03/02",
      "transport" : "新幹線"
    },
    {
      "name" : "北海道",
      "date" : "2006/04/06",
      "transport" : "飛行機"
    }
  ]
}

内容的提问来源于stack exchange,提问作者tarako

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 21:06:05