准备用 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 |