NSJSONSerialization 将 \n 添加到 JSON 字符串的开头和结尾
Posted
技术标签:
【中文标题】NSJSONSerialization 将 \\n 添加到 JSON 字符串的开头和结尾【英文标题】:NSJSONSerialization adding \n to beginning and end of JSON stringNSJSONSerialization 将 \n 添加到 JSON 字符串的开头和结尾 【发布时间】:2015-03-24 18:15:09 【问题描述】:我有一个 ios 应用程序需要以 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"]
【问题讨论】:
【参考方案1】:使用
[NSJSONSerialization dataWithJSONObject:self options:0 error:nil];
[NSJSONSerialization dataWithJSONObject:self options:kNilOptions
error:nil];
如果未设置该选项,将生成最紧凑的 JSON。如果发生错误,将设置error参数,返回值为nil。生成的数据采用 UTF-8 编码。
来自 Apple 文档。
【讨论】:
【参考方案2】:首先,输出绝对正确。可以在 JSON 中的正确位置添加空格和换行符。 JSON解析器将能够解析它。
为什么会这样?因为您在 cde 中绝对粗心。看看你通过的选项。它是解析 JSON 时使用的选项,而不是编写 JSON 时使用的选项。为什么要将读取 JSON 的选项传递给写入 JSON 的方法?现在去看看写选项,看看哪个写选项的值与你传递的读选项完全相同。
【讨论】:
以下代码产生所需的输出: NSData *jsonData = [NSJSONSerialization dataWithJSONObject:_selectedStyles options:nil error:&error]; PS:你可以提供帮助而不是粗鲁。谢谢指点。以上是关于NSJSONSerialization 将 \n 添加到 JSON 字符串的开头和结尾的主要内容,如果未能解决你的问题,请参考以下文章
NSJSONSerialization - 无法将数据转换为字符串
使用 NSJSONSerialization 解析 JSON - 抛出 NSException
为啥 NSJSONSerialization 将 NSDictionary 错误地解析为 JSON?
使用 NSJSONSerialization 将 NSMutableDictionary 转换为 JSON 会返回不同的结果