Objective-C - How to convert NSString to escaped JSON string?

I have an NSString that can contain quotes \, /, \ r, \ n, and I want to convert it to a JSON encoded string, so strings like this

"text1 \ text2"

becomes

\ "text1 \\ text2 \"

Is there an existing function that allows me to do this?

Also, I am using SBJson in my project, but I cannot find out if SBJson can do this or not.

NSJSONSerialization is not in the table, as my application still needs OSX 10.6 support

+4
source share
4 answers

Does this answer your question?

-(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]; } 

Source: Convert NSString to JSON String

+12
source

do it in a more-native-JSON-way;)

If I also like my answer, please run me at 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]; 
+1
source

Swift 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 } 

Swift 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 } 

It is very useful to prevent the error: Domain=NSCocoaErrorDomain Code=3840 "Invalid escape sequence around character 123."

0
source

Swift 4 Solution

 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 } } 
0
source

All Articles