我有可能包含引號,\,/,\ r \ n中的NSString,我想將其轉換爲一個JSON編碼字符串,字符串這樣Objective-C - 如何將NSString轉換爲轉義的JSON字符串?
"text1\text2"
成爲
\"text1\\text2\"
有沒有現有的功能讓我這樣做?
此外,我在我的項目中使用SBJson,但我無法找到SBJson是否可以做到這一點。
NSJSONSerialization是上不了檯面的,因爲我的應用程序仍然需要支持OSX 10.6
我有可能包含引號,\,/,\ r \ n中的NSString,我想將其轉換爲一個JSON編碼字符串,字符串這樣Objective-C - 如何將NSString轉換爲轉義的JSON字符串?
"text1\text2"
成爲
\"text1\\text2\"
有沒有現有的功能讓我這樣做?
此外,我在我的項目中使用SBJson,但我無法找到SBJson是否可以做到這一點。
NSJSONSerialization是上不了檯面的,因爲我的應用程序仍然需要支持OSX 10.6
這是否回答你的問題?
-(NSString *)JSONString:(NSString *)aString {
NSMutableString *s = [NSMutableString stringWithString:aString];
[s replaceOccurrencesOfString:@"\"" withString:@"\\\"" options:NSCaseInsensitiveSearch range:NSMakeRange(0, [s length])];
[s replaceOccurrencesOfString:@"/" withString:@"\\/" options:NSCaseInsensitiveSearch range:NSMakeRange(0, [s length])];
[s replaceOccurrencesOfString:@"\n" withString:@"\\n" options:NSCaseInsensitiveSearch range:NSMakeRange(0, [s length])];
[s replaceOccurrencesOfString:@"\b" withString:@"\\b" options:NSCaseInsensitiveSearch range:NSMakeRange(0, [s length])];
[s replaceOccurrencesOfString:@"\f" withString:@"\\f" options:NSCaseInsensitiveSearch range:NSMakeRange(0, [s length])];
[s replaceOccurrencesOfString:@"\r" withString:@"\\r" options:NSCaseInsensitiveSearch range:NSMakeRange(0, [s length])];
[s replaceOccurrencesOfString:@"\t" withString:@"\\t" options:NSCaseInsensitiveSearch range:NSMakeRange(0, [s length])];
return [NSString stringWithString:s];
}
夫特2:
/// Escape reserved characters to produce a valid JSON String
/// For example double quotes `"` are replaced by `\"`
/// - parameters:
/// - String: an unescaped string
/// - returns: valid escaped JSON string
func JSONString(str: String?) -> String? {
var result : String? = nil
if let str = str {
result = str
.stringByReplacingOccurrencesOfString("\"", withString: "\\\"", options: .CaseInsensitiveSearch)
.stringByReplacingOccurrencesOfString("/", withString: "\\/", options: .CaseInsensitiveSearch)
.stringByReplacingOccurrencesOfString("\n", withString: "\\n", options: .CaseInsensitiveSearch)
.stringByReplacingOccurrencesOfString("\u{8}", withString: "\\b", options: .CaseInsensitiveSearch)
.stringByReplacingOccurrencesOfString("\u{12}", withString: "\\f", options: .CaseInsensitiveSearch)
.stringByReplacingOccurrencesOfString("\r", withString: "\\r", options: .CaseInsensitiveSearch)
.stringByReplacingOccurrencesOfString("\t", withString: "\\t", options: .CaseInsensitiveSearch)
}
return result
}
夫特3:
func JSONString(str: String) -> String {
var result = str
result = result.replacingOccurrences(of: "\"", with: "\\\"")
.replacingOccurrences(of: "/", with: "\\/")
.replacingOccurrences(of: "\n", with: "\\n")
.replacingOccurrences(of: "\u{8}", with: "\\b")
.replacingOccurrences(of: "\u{12}", with: "\\f")
.replacingOccurrences(of: "\r", with: "\\r")
.replacingOccurrences(of: "\t", with: "\\t")
return result
}
非常有用的,以防止錯誤:Domain=NSCocoaErrorDomain Code=3840 "Invalid escape sequence around character 123."
不應該'\ n'替換爲'\\ n'? – Crashalot 2016-10-27 21:15:36
讓我們做更多的原生JSON的路;)
如果妳喜歡我的回答,請明星我在https://github.com/wanjochan
//trick: id(@[s]) => string => trim [] => target
//NSString *s
s=[[NSString alloc] initWithData:
[NSJSONSerialization dataWithJSONObject:@[s] options:0 error:nil]
encoding:NSUTF8StringEncoding];
s=[[s substringToIndex:([s length]-1)] substringFromIndex:1];
斯威夫特4解決方案
extension String {
var stringEncodedJSON: String {
var copy = self
let encodingDict: [String: String] = ["\"": "\\\"", "/": "\\/", "\n": "\\n", "\u{8}": "\\b","\u{12}": "\\f", "\r": "\\r", "\t": "\\t"]
encodingDict.forEach({ copy = copy.replacingOccurrences(of: $0, with: $1) })
return copy
}
}
怎麼樣幾行代碼用於轉義不可打印的字符? '\ U1234'等 – 2013-04-05 21:12:27
是否正確處理了unicode字符? (http://json.org) – Jean 2013-04-05 21:15:38
是的。謝謝! – lakeskysea 2013-04-05 21:41:28