序列化异源阵列

Posted

技术标签:

【中文标题】序列化异源阵列【英文标题】:Serialize heterogenic array 【发布时间】:2019-12-06 18:41:36 【问题描述】:

我有一个以下 JSON 字符串,我需要对其进行序列化并在 POST 请求中作为正文发送。


    "rules": [[
        
            "operator": "text_field_contains",
            "args": [
                "8",
                "test"
            ]
        ],
        [
            "operator": "text_field_contains",
            "args": [
                "6",
                "test"
            ]
        
    ],
    
        "operator": "status_any",
        "args": []
    
    ]

我在将其转换为 Swift 对象时遇到问题。如您所见,rules 属性包含带有[Rule]Rule 对象的异构数组,其结构如下:

struct Rule: Codable, Equatable 
    let rOperator: String
    let args: [String]?

    enum CodingKeys : String, CodingKey 
        case rOperator = "operator"
        case args
    

    init(ruleOperator: String, args: [String]? = nil) 
        self.rOperator = ruleOperator
        self.args = args
    

如何将上面的JSON转换成Data?

【问题讨论】:

如果您手头已有该字符串,则不需要codable。只需将其转换为 data 并设置您的请求正文。 你说得对,我完全错过了 【参考方案1】:

如果你有以下 JSON String

    let str = """
    "rules":[["operator":"text_field_contains","args":["8","test"]],["operator":"text_field_contains","args":["6","test"]],"operator":"status_any","args":[]]
    """

只需使用data(using:)String 转换为Data 喜欢,

    if let data = str.data(using: .utf8) 
        //use data here....
    

【讨论】:

还有一个更简单的方法:let data = Data(str.utf8),它返回一个非可选的。

以上是关于序列化异源阵列的主要内容,如果未能解决你的问题,请参考以下文章

c_cpp 最大子阵列和子序列

RAID-5磁盘阵列 序列号无法读取 在SAS扩展卡上硬盘无法识别

RAID-5磁盘阵列 序列号无法读取 在SAS扩展卡上硬盘无法识别

LQ0131 字母阵列DFS

[js]ajax-异源请求jsonp

[js]jquery里的jsonp实现ajax异源请求