我有一些JSON,其中包含另一个JSON对象在字符串的形式(注意"jsonString"
值周围的引号):
{
"jsonString":"{"someKey": "Some value"}"
}
我知道如果"jsonString"
的值没有引号,我会这样做:
import Foundation
struct Something: Decodable {
struct SomethingElse: Decodable {
let someKey: String
}
let jsonString: SomethingElse
}
let jsonData = """
{
"jsonString":"{"someKey": "Some value"}"
}
""".data(using: .utf8)!
let something = try! JSONDecoder().decode(Something.self, from: jsonData)
但这对我的情况不起作用。它不工作,即使我把"jsonString"
作为String
,并做这样的事情:
init(from decoder: Decoder) throws {
let container = try decoder.container(keyedBy: SomethingKey.self)
let jsonStringString = try container.decode(String.self, forKey: .jsonString)
if let jsonStringData = jsonStringString.data(using: .utf8) {
self.jsonString = try JSONDecoder().decode(SomethingElse.self, from: jsonStringData)
} else {
self.jsonString = SomethingElse(someKey: "")
}
}
private enum SomethingKey: String, CodingKey {
case jsonString
}
我遇到的错误是:
Swift.DecodingError.dataCorrupted(Swift.DecodingError.Context(codingPath: [], debugDescription: "The given data was not valid JSON.", underlyingError: Optional(Error Domain=NSCocoaErrorDomain Code=3840 "Badly formed object around line 2, column 18." UserInfo={NSDebugDescription=Badly formed object around line 2, column 18., NSJSONSerializationErrorIndex=20})))
但是,我尝试过的所有JSON验证器都说JSON是有效的,并且符合RFC 8259。
Swift不允许我转义嵌套的"{"one_answers"}";。
JSON格式,不幸的是,超出了我的控制,我不能改变它。
我也发现了这个问题,它看起来很相似,但没有任何工作。答案仅与常规嵌套JSON对象相关。或者我错过了什么
任何帮助都是感激的!
错误是说整个JSON无效,而不仅仅是jsonString
值。
虽然这是真的(你可以测试它在在线验证器,如JSONLint为例):
{
"jsonString": "{"someKey": "Some value"}"
}
当在Swift中声明它为String时,你需要确保反斜杠确实存在。
这是:
let jsonString = """
{ "jsonString": "{\"someKey\": \"Some value\"}"}
"""
或
let jsonString = #"{"jsonString":"{"someKey": "Some value"}"}"#