代码之家  ›  专栏  ›  技术社区  ›  Bug Hunter Zoro

将KeyValuePairs<String:String>转换为JSON

  •  0
  • Bug Hunter Zoro  · 技术社区  · 5 年前

    我正试图改变 KeyValuePairs<String:String> 对于JSON,以下是我到目前为止尝试过的方法,它作为KeyValuePairs失败了。

    var userKeyValuePair: KeyValuePairs<String, String> {
        return ["FirstName": "NSDumb",
                "Address": "some address value",
                "Age": "30"]
    }
    

    我在用 KeyValuePairs 由于我需要键值在一个序列中的顺序,而不是无序的,所以我尝试使用以下代码将上面的内容转换为JSON

    let serializedData = try! JSONSerialization.data(withJSONObject: userKeyValuePair, options: [])
            let encodedData = String(data: serializedData, encoding: String.Encoding.utf8)
    

    但是上面的代码抛出一个运行时错误,并抱怨JSON值无效。

    Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Invalid type in JSON write (__SwiftValue)'
    

    如果我使用上面的字典来序列化JSONObject,它可以很好地工作,但不能与KeyValuePairs一起工作,我首先想也许我应该创建自己的类型来实现 Sequence 但在我走这条路之前,我想知道是否有更好的方法?

    0 回复  |  直到 5 年前
        1
  •  0
  •   Bug Hunter Zoro    5 年前

    我试着绕着它转了转,但没能找到一个办法让它停下来 KeyValuePairs<String, String> 转换为字典,所以我最终使用了字典,并更改了代码流,以实现我的目标。

    如果你的需求需要你有一本有序的字典,那么我确实遇到了一个 good library which you may want to have a look at 但最后我用字典完成了我的工作。

    仔细想想,不会有任何情况下需要对字典进行排序,因为字典的整个想法就是只存储一组可哈希的键值对,所以最后我调整了逻辑以解决这种情况,并达到了预期的结果。