NSJSON序列化在 JSON 字符串的开头和结尾添加 \n
NSJSONSerialization adding \n to beginning and end of JSON string
我有一个 iOS 应用程序需要 post 一些 json 格式的信息到服务器。特别是,我需要获取一个 NSArray 字符串并将其转换为 json 格式的 NSString。我正在使用以下代码创建字符串:
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:_selectedStyles options:NSJSONReadingMutableContainers error:&error];
if(error){
//TODO: handle error
}
NSString *selectedStylesInJson = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
但是,由此产生的字符串如下:
@"[\n \"schlager\",\n \"volkstuemlicherSchlager\"\n]"
如您所见,NSJSONSerialization 方法在数组中的每个字符串前后插入一个 \n,这是不正确的。
如何使 iOS 以正确的格式转换此数组?我要找的格式是:
["object 1", "object 2"]
首先,输出是绝对正确的。在 JSON 中适当的地方加空格和换行就好了。 JSON 解析器将能够解析它。
为什么会这样?因为你在你的 cde 中绝对粗心。查看您通过的选项。这是一个在你解析 JSON 时使用的选项,而不是在你写 JSON 时使用的选项。为什么要将读取 JSON 的选项传递给写入 JSON 的方法?现在去看看写选项,看看哪个写选项和你传递的读选项的值完全一样。
使用
[NSJSONSerialization dataWithJSONObject:self options:0 error:nil];
[NSJSONSerialization dataWithJSONObject:self options:kNilOptions
error:nil];
If that option is not set, the most compact possible JSON will be generated. If an error occurs, the error parameter will be set and the return value will be nil. The resulting data is a encoded in UTF-8.
来自 Apple 文档。
我有一个 iOS 应用程序需要 post 一些 json 格式的信息到服务器。特别是,我需要获取一个 NSArray 字符串并将其转换为 json 格式的 NSString。我正在使用以下代码创建字符串:
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:_selectedStyles options:NSJSONReadingMutableContainers error:&error];
if(error){
//TODO: handle error
}
NSString *selectedStylesInJson = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
但是,由此产生的字符串如下:
@"[\n \"schlager\",\n \"volkstuemlicherSchlager\"\n]"
如您所见,NSJSONSerialization 方法在数组中的每个字符串前后插入一个 \n,这是不正确的。
如何使 iOS 以正确的格式转换此数组?我要找的格式是:
["object 1", "object 2"]
首先,输出是绝对正确的。在 JSON 中适当的地方加空格和换行就好了。 JSON 解析器将能够解析它。
为什么会这样?因为你在你的 cde 中绝对粗心。查看您通过的选项。这是一个在你解析 JSON 时使用的选项,而不是在你写 JSON 时使用的选项。为什么要将读取 JSON 的选项传递给写入 JSON 的方法?现在去看看写选项,看看哪个写选项和你传递的读选项的值完全一样。
使用
[NSJSONSerialization dataWithJSONObject:self options:0 error:nil];
[NSJSONSerialization dataWithJSONObject:self options:kNilOptions
error:nil];
If that option is not set, the most compact possible JSON will be generated. If an error occurs, the error parameter will be set and the return value will be nil. The resulting data is a encoded in UTF-8.
来自 Apple 文档。