
准备用 swfit 写一个七牛生成 token 的算法,发现将 Dictionay 转成 JSON 再生成 URL 安全的 Base64 编码与在线实例不一致
func JSONStringify(value: AnyObject,prettyPrinted:Bool = false) -> String{ let optiOns= prettyPrinted ? NSJSONWritingOptions.PrettyPrinted : NSJSONWritingOptions(rawValue: 0) if NSJSONSerialization.isValidJSONObject(value) { do{ let data = try NSJSONSerialization.dataWithJSONObject(value, options: options) if let string = NSString(data: data, encoding: NSUTF8StringEncoding) { return string as String } }catch { print("error") //Access error here } } return "" } let jsonObject: [String : AnyObject] = ["deadline":1448340828,"scope":"Blog",] let jsOnString= JSONStringify(jsonObject) let Data = jsonString.dataUsingEncoding(NSUTF8StringEncoding) let encoded = Data?.base64EncodedStringWithOptions(NSDataBase64EncodingOptions.Encoding64CharacterLineLength) let demoStr = "{\"scope\":\"Blog\",\"deadline\":1448340828}" let demoData = demoStr.dataUsingEncoding(NSUTF8StringEncoding) let demoEncoded = demoData?.base64EncodedStringWithOptions(NSDataBase64EncodingOptions.Encoding64CharacterLineLength) print(encoded) print(demoEncoded) 手动构建字面量 String 的 demoEncoded 与在线实例是一致的,构建 Dictionary 转化的 encode 与实例不一致,一直没弄明白症结
1 sujin190 2015-11-24 13:01:33 +08:00 key 的顺序不一样吧, jsonString demoStr 是一样的? |
2 Dean OP @sujin190 应该跟 key 的顺序无关,修改过顺序也一样 , jsonString 和 demoString 比对过不一样,但是不明白为什么 dictionary 转会后会不一致 |
3 Dean OP 纠正一行代码 let jsonObject: [String : AnyObject] = ["scope":"Blog","deadline":1448340828] |
4 sujin190 2015-11-24 15:11:30 +08:00 @Dean 这个 dictionary 实现来说,它的 key 的顺序和书写顺序是无关的,把 jsonString 和 demoString 输出来看看呗 |
5 Dean OP |