当前位置: 首页 > 面试题库 >

使用Codable序列化为JSON时转义Swift String

闻昊英
2023-03-14
问题内容

我正在尝试序列化我的对象,如下所示:

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中的字符串转义。


问题答案:

我最终使用replacingOccurrences(of:with:),这可能不是最好的解决方案,但它解决了这个问题:

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)?.replacingOccurrences(of: "\\/", with: "/") {
    print(str)
    dump(str)
}


 类似资料:
  • 问题内容: 我正在使用大猩猩 websocket,并且正在计划使用json进行序列化/反序列化。 假设我有这样的结构来接收传入的消息: 和 大猩猩提供接收传入的消息。传入的消息可以是Foo或Bar,但是我不能使用和收听其他消息,这很混乱。我想要像javascript 这样的东西。如果接收到Foo,则如何处理传入消息,然后将其存储到结构中;如果接收到Bar,则将其存储到结构中? 我正在解决方案正在使

  • 问题内容: 我正在使用Flickr API 。调用该方法时,默认的JSON结果为: 我想将此响应解析为Java对象: JSON属性应按以下方式映射: 不幸的是,我无法找到一种使用Annotations做到这一点的好方法。到目前为止,我的方法是将JSON字符串读入a 并从中获取值。 但是我认为,这是有史以来最不优雅的方式。有没有简单的方法,可以使用注释还是自定义反序列化器? 这对我来说将是很明显的,

  • 问题内容: 使用Swift 3 ,如果您的数据模型的一部分是完全动态的,则始终可以将反序列化的数据保留在原处,并让使用者处理它。 使用Swift 4 ,我想这样做: 但是我明白了 如果我可以实现自己的功能,那将不会是世界的尽头,但这将需要支持对的解码,据我所知,这不是。例如: 给 有什么解决办法吗? 问题答案: 我最终不得不实现自己的类来对值进行编码/解码。它不是很漂亮,但是似乎可以正常工作:

  • 问题内容: 我有一个iOS应用程序,需要处理来自Web服务的响应。响应是包含序列化JSON对象的序列化JSON字符串,如下所示: 请注意,此响应是JSON 字符串 ,而不是JSON对象。我需要做的是将字符串反序列化,这样我就可以得到: 然后我可以用来反序列化为。 但是,我该如何第一步?也就是说,如何“解串”字符串,以便拥有序列化的JSON对象? 仅当顶级对象是数组或字典时才有效;它不适用于字符串。

  • 问题内容: 我正在序列化 http://powercollections.codeplex.com/到json。 它具有618个元素,这些元素具有深层嵌套,即单个Object可能在其中包含多个字典之类的对象。我正在使用JSON.Net 我想念什么? 更多信息:-直到我使用dynamic之前,它都可以正常工作,我不得不切换到MultiDictionary以允许具有相同名称的多个属性。它适用于大多数情

  • 问题内容: 我是C ++的新手。使用序列化和反序列化类型数据的最简单方法是什么。我发现了一些使用示例,但它们对我来说是晦涩的。 问题答案: 请注意,将键解释为路径,例如,将对“ ab” =“ z”放置将创建{“ a”:{“ b”:“ z”}} JSON,而不是{“ ab”:“ z”} 。否则,使用是微不足道的。这是一个小例子。