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 会返回不同的结果

使用 NSJSONSerialization 将 NSDictionary 转换为 NSData

iOS - NSJSONSerialization:无法将数据转换为围绕字符的字符串