Iphone 有什么方法可以从Xcode中的JSON响应中删除注释字符吗?
我是JSON新手。JSON解析器中是否有从响应中删除注释字符的方法 例如//{“回应”:“成功” 它是iPhone的SBJson。Iphone 有什么方法可以从Xcode中的JSON响应中删除注释字符吗?,iphone,json,parsing,comments,Iphone,Json,Parsing,Comments,我是JSON新手。JSON解析器中是否有从响应中删除注释字符的方法 例如//{“回应”:“成功” 它是iPhone的SBJson。 从来看,JSON语法不允许注释。这显然不能回答您的问题,但我怀疑您必须进行一些字符串操作,并将所有注释字符替换为空字符串,然后才使用JSON库对其进行解析。JSON解析器对JSON的开头非常挑剔要解析的块-它们不喜欢开始时除“{”以外的字符(至少我在TouchJSON中发现了这一点,听起来您使用SBJson的情况类似) 因此,只需使用字符串并删除开头“{”之前的所有
从来看,JSON语法不允许注释。这显然不能回答您的问题,但我怀疑您必须进行一些字符串操作,并将所有注释字符替换为空字符串,然后才使用JSON库对其进行解析。JSON解析器对JSON的开头非常挑剔要解析的块-它们不喜欢开始时除“{”以外的字符(至少我在TouchJSON中发现了这一点,听起来您使用SBJson的情况类似) 因此,只需使用字符串并删除开头“{”之前的所有字符,即可解析:
NSRange startJSONRange = [myJSONString rangeOfString:@"{"];
startJSONRange.length = myJSONString.length - startJSONRange.location;
NSString *correctJSONString = [myJSONString substringWithRange:startJSONRange];
// parse correctJSONString
这会起作用,但真正的解决办法是告诉发送JSON的人不要胡说八道,发送真正的JSON。现在,这很容易做到:
下面是获取和解析实际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”:
在开发过程中,从“json”中删除#注释行:
注意解码数据的代码行
:
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,
},
就这么简单
关于使用正则表达式的重要注意事项: 正则表达式是一个复杂的过程。本文中使用的正则表达式示例仅表示 “删除所有以“#”开头的完整行” 因此,它只理解简单的“完整行”注释 如何编写正则表达式超出了本QA的范围
当你在
let fixed=
预先咀嚼文本时,使用任何你想要的正则表达式或其他技术。你提到了一个JSON解析器,但没有告诉我们是哪一个。它是十年后的SBJson,这是现代Swift现在很容易做到的事情之一。十年后,幸运的是,这是现代Sw现在很容易做到的事情之一在开发过程中,服务器上通常会有带有注释的“json”。您只需添加几行代码即可在iOS中实现。