无法使用 NSJSONSerialization 将数字转换为 JSON 值

Posted

技术标签:

【中文标题】无法使用 NSJSONSerialization 将数字转换为 JSON 值【英文标题】:Can't use NSJSONSerialization to convert number to JSON value 【发布时间】:2015-01-23 14:06:52 【问题描述】:

我需要通过使用 AFNetworking 向服务器发布一个 JSON 数字值,我是这样做的:

let url:Int = "my_url_here"
let param = myNumber

let task = self.sessionManager.POST(url, param, success:mySuccessBlock, failure:myFailureBlock)

遇到异常:

'NSInvalidArgumentException',原因:'*** +[NSJSONSerialization dataWithJSONObject:options:error:]:JSON 写入中的***类型无效'

设置异常断点后,代码停在[mutableRequest setHTTPBody...]

#pragma mark - AFURLRequestSerialization
- (NSURLRequest *)requestBySerializingRequest:(NSURLRequest *)request
                           withParameters:(id)parameters
                                    error:(NSError *__autoreleasing *)error

......
**[mutableRequest setHTTPBody:[NSJSONSerialization dataWithJSONObject:parameters options:self.writingOptions error:error]];**
......

所以[NSJSONSerialization dataWithJSONObject:options:error:] 不能用于将 Int/NSNumber 转换为 JSON?我该怎么办?

【问题讨论】:

你通常会有类似let param = ["my_key" : myNumber]的东西,它会生成看起来像"my_key":42(或其他)的JSON。如果您只提供一个数字,您希望 JSON 是什么样子? 【参考方案1】:

最小有效 JSON 是 []。您需要将数字包装在对象或数组中。

例如,试试let param = [myNumber]let param = ["number" : myNumber]

您可以使用JSONLint 之类的工具来验证您的 JSON。

【讨论】:

以上是关于无法使用 NSJSONSerialization 将数字转换为 JSON 值的主要内容,如果未能解决你的问题,请参考以下文章

NSJSONSerialization 无法解析有效的 JSON - “垃圾结束”

使用 NSDictionary 访问 NSJSONSerialization 数据

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

Swift - NSJsonSerialization - “无法将数据转换为围绕字符的字符串”错误

Swift 2 - NSJSONSerialization.JSONObjectWithData 处理错误 [重复]

NSJSONSerialization 包含正斜杠的字符串序列化 / 和 HTML 被错误地转义