-
前言
即将周末了,今天聊点轻松的,也是工作中发现的一个有趣的知识点,这个知识点可以用下面这个问题概括:
如果让你把一张图片塞到Json里,你知道怎么做吗?
如果你很清楚步骤,这篇文章就可以不用看了。
Convert to Json 允许的字段类型
先说下背景,今天做需求时需要将一个自定义的model序列化为json串,我使用了 yy_modelToJSONString
方法发现获取到的一直都是 nil
,于是我Debug进到 YYModel 中查找原因,在下面这样一段代码发现了问题:
1 | - (NSData *)yy_modelToJSONDataWithConfigTag:(NSString *_Nullable)configTag { |
主要问题就是 [NSJSONSerialization isValidJSONObject:jsonObject]
,我发现是能够正常获取 jsonObject
的(NSDictionary结构),但在isValidJSONObject
判断时,返回了NO
,isValidJSONObject
是系统方法,我们看它是怎么说明的:
1 | /* Returns YES if the given object can be converted to JSON data, NO otherwise. The object must have the following properties: |
说得很清楚,顶层结构需要是NSArray、NSDictionary,允许转换的value只能是NSString, NSNumber, NSArray, NSDictionary, or NSNull。
于是我查看我自己在转换的自定义Model,发现自定义Model中有一个字段是 NSData
类型,如此一来便导致 Convert to Json失败。
下图用Demo进行验证:
当 NSDictionary
填入基本数据类型时,是可以Convert to Json的。
当我们将一个 UIImage
装入了 NSDictionary
,发现 Convert to json fail。
把图片存到Json
其实这个问题很简单,我们把 UIImage 转成 Base64 字符串存到Json中即可,可以理解为 base64 是对二进制的一种描述。