【发布时间】:2018-04-15 00:54:46
【问题描述】:
我正在尝试将我的对象序列化如下:
import Foundation
struct User: Codable {
let username: String
let profileURL: String
}
let user = User(username: "John", profileURL: "http://google.com")
let json = try? JSONEncoder().encode(user)
if let data = json, let str = String(data: data, encoding: .utf8) {
print(str)
}
但是在 macOS 上,我得到以下信息:
{"profileURL":"http:\/\/google.com","username":"John"}
(注意转义的“/”字符)。
在 Linux 机器上我得到:
{"username":"John","profileURL":"http://google.com"}
如何让 JSONEncoder 返回未转义的?
我需要 JSON 中的字符串严格不转义。
【问题讨论】:
-
别担心。你的字符串没有问题
-
这不是一个选项,因为我必须签署数据并验证签名。有多余的字符会使签名无效
-
还要注意
\/是一个有效 JSON转义序列,比较json.org。 -
马丁说得对。 JSON 规范要求允许对斜杠进行转义。听起来您的服务器不兼容 JSON。话虽如此,如果您确实需要,可以将数据中所有出现的“\/”替换为“/”。
-
@tofiffe:你甚至不能依赖键/值对的顺序,也可能有额外的空格。这也会破坏签名吗? – 如果所有这些事情都很重要,您可能必须编写自己的 JSON 编码器。
标签: ios json swift macos codable