无法使用 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 - “无法将数据转换为围绕字符的字符串”错误