【问题标题】:Unable to decode json string from Dictionary object in same order and sequence in Swift iOS无法在 Swift iOS 中以相同的顺序和顺序从 Dictionary 对象中解码 json 字符串
【发布时间】: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


【解决方案1】:
  1. 不要使用 MD5 它已损坏。

  2. 从 JSON 解析创建您的字典,然后从该字典实例化 objects

  3. 使用 Keccak、SHA-2、SHA-3 或 Blake2 等合理的摘要对对象进行哈希处理。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-16
    • 1970-01-01
    • 2014-11-08
    • 1970-01-01
    相关资源
    最近更新 更多