在另一个JSON中解析JSON字符串



我有一些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"}"}"#

相关内容

  • 没有找到相关文章

最新更新