我是JSON的新手。 JSON解析器中是否有任何方法可以从响应中删除注释字符。
EG。 // { “响应”: “成功” .......
其SBJson for iPhone。 来自http://code.google.com/p/json-framework
答案 0 :(得分:2)
JSON语法不允许注释。这显然没有回答你的问题,但我怀疑你必须做一些字符串操作并用空字符串替换所有这些注释字符,并且只有在这样做之后才用JSON库解析它。
答案 1 :(得分:1)
这是您获取和解析实际json的方式
// normal json no comments
func getStuff() {
guard let url = URL(string: "http://you.com/x.json") else { return print("?") }
let configuration = URLSessionConfiguration.ephemeral
aSession = URLSession(configuration: configuration)
aSession.dataTask(with: url) { [weak self] data, response, error in
guard let _ = self else { return print("woe") }
guard let data = data else { return print("woe") }
do {
let result = try JSONDecoder().decode(YourStructure.self, from: data)
localBlah = Dictionary(uniqueKeysWithValues: result.whatever)
} catch let error {
print(error)
}
}.resume()
}
以下是获取和解析带有简单注释行的“ json”的方法:
请注意解码data
的代码行
let result = try JSONDecoder().decode(YourStructure.self, from: data)
只需将以下三行代码粘贴到该行之前:
let s = String(decoding: data, as: UTF8.self)
let fixed = s.replacingOccurrences(
of: "(?m)^#.*",
with: "",
options: .regularExpression)
guard let data2: Data = fixed.data(using: .utf8) else { return print("woe") }
let result = try JSONDecoder().decode(YourStructure.self, from: data2)
因此,在服务器上的“ json”开发过程中,您可能会遇到诸如..
"measures": [ {
"screen":"options",
"topMargin":25,
# don't change topmargin anyone
"leftMargin":12,
# Note, Steve prefers 13. But everyone else prefers 12.
"rightMargin":20,
},
就这么简单。
正则表达式是一个复杂的过程。本文中使用的正则表达式示例只是意味着
“删除所有以'#'开头的全行
因此,它只能理解简单的“全行”注释。
如何编写正则表达式超出了本质量检查的范围。
在let fixed =
处预先填充文本时,请使用所需的任何正则表达式或其他技术。
答案 2 :(得分:0)
你可以发布更多代码吗?你需要JSON字符串的哪一部分?
只是不要将响应解析为你的词典/对象/无论什么......
答案 3 :(得分:0)
JSON解析器对于要解析的JSON块的开头非常挑剔 - 它们在开始时不喜欢“{”之外的字符(至少这是我在TouchJSON中找到的,它听起来像你的案例与SBJson类似)。
因此,只需取出字符串并在开头“{”之前删除任何字符,然后就可以解析:
NSRange startJSONRange = [myJSONString rangeOfString:@"{"];
startJSONRange.length = myJSONString.length - startJSONRange.location;
NSString *correctJSONString = [myJSONString substringWithRange:startJSONRange];
// parse correctJSONString
这样可行,但真正的解决方法是告诉谁发送给你JSON来删除废话并发送真正的JSON。