【发布时间】:2020-07-06 09:32:12
【问题描述】:
我创建了一个包含一些值的字典。我想创建该字典对象的 JSON 字符串。
我正在使用 String(data: data, encoding: .utf8)! 创建 json 字符串,但每次运行此代码时,我都会以不同的顺序和相同数据的顺序获取 json 字符串。
import Foundation
import CommonCrypto
var object = ["emp1":["name":"neeraj","age":"14","degree":"Btech"],
"emp2":["name":"ajay","age":"24","degree":"Mca"],
"emp3":["name":"vijay","age":"34","degree":"Bca"],
"emp4":["name":"raju","age":"44","degree":"Mtech"]]
if let data = try? JSONSerialization.data(withJSONObject: object, options: []){
print(String(data: data, encoding: .utf8)!)
}
第一次结果:
{"emp2":{"age":"24","degree":"Mca","name":"ajay"},"emp4":{"age":"44","name" :"raju","degree":"Mtech"},"emp3":{"degree":"Bca","name":"vijay","age":"34"},"emp1":{"学位":"Btech","name":"neeraj","age":"14"}}
第二次成绩:
{"emp1":{"age":"14","degree":"Btech","name":"neeraj"},"emp4":{"name":"raju","degree" :"Mtech","age":"44"},"emp3":{"name":"vijay","age":"34","degree":"Bca"},"emp2":{" name":"ajay","age":"24","degree":"Mca"}}
我希望每次都得到相同的结果。
我需要相同的顺序来创建 md5 校验和以与收到的校验数据进行比较。
我收到来自网络服务的响应 例如
{
"payload":{
"object1":["name":"neeraj"],
"object2":["name":"ajay"]
},
"hash":"<hash of payload using md5>"
}
我必须在我身边创建一个 md5 哈希,并且需要用我收到的哈希进行验证。
但是当我创建 JSON 字符串时,我得到了不同的顺序,并且我的哈希与收到的哈希不匹配。
请帮忙
【问题讨论】:
-
字典未排序。你不应该在乎。
-
有可能吗?我需要相同的顺序来创建 md5 校验和以与收到的校验数据进行比较。 @Larme
-
检查
JSONSerialization.data(withJSONObject:options:)中的选项,但你不应该关心顺序。如果您确实关心顺序,那么您可能对数组而不是字典感兴趣。 -
我明白你的意思。但是你有什么解决方案来创建从 API 服务接收到的 json 对象的检查。
-
如果可能(iOS 11+)你可以使用
.sortedKeys(developer.apple.com/documentation/foundation/jsonserialization/…)。
标签: ios json swift3 cryptography md5