Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Swift中将数组元素转换为合适的json_Json_Swift - Fatal编程技术网

在Swift中将数组元素转换为合适的json

在Swift中将数组元素转换为合适的json,json,swift,Json,Swift,我有一个数字数组,比如[1,2],我想将其转换为json格式,如下所示: ["id_list": [ { "id" : 1 }, { "id" : 2 } ] ] 这可以用Swift完成吗?你可以试试 struct Root :Codable { let id_list:[InnerItem] } struct InnerItem : Codable

我有一个数字数组,比如[1,2],我想将其转换为json格式,如下所示:

["id_list":
    [
        {
            "id" : 1
        },

        {
            "id" : 2
        }
    ]
]
这可以用Swift完成吗?

你可以试试

struct Root :Codable {

    let  id_list:[InnerItem]
}

struct InnerItem : Codable {

    var  id:String

}
//

//

试试这个

let dic = ["id_list":[["id": "1"], ["id": "2"], ["id": "3"]]]
    let encoder = JSONEncoder()
    if let jsonData = try? encoder.encode(dic) {
        if let jsonString = String(data: jsonData, encoding: .utf8) {
            print(jsonString)
        }
    }
您的输出将如下所示


{“id_list”:[{“id”:“1”},{“id”:“2”},{“id”:“3”}]}

您可以尝试以下简单方法,对每个循环执行

let arr = [1,2,3,4]

var str = "[\"id_list\":["
for element in arr {
    str = str + "{\"id\": \(element)},"
}
str.remove(at: str.index(before: str.endIndex))
str = str + "]]";
输出

["id_list":[{"id": 1},{"id": 2},{"id": 3},{"id": 4}]]

使用
Codable

struct Ident : Codable {
    let id : Int
}
将数组映射到结构项

let array = [1, 2, 3]
let idArray = array.map{ Ident(id:$0) }
然后使用
JSONEncoder
创建JSON

do {
    let jsonData = try JSONEncoder().encode(["id_list" : idArray])
    let jsonString = String(data: jsonData, encoding:.utf8)!
    print(jsonString) // {"id_list":[{"id":1},{"id":2},{"id":3}]}
} catch { print(error) }

您的JSON格式无效,可能是
{“id\u list”:…}
[{“id\u list”:…}]
但它不能是
[“id\u list”:…]

为什么在swift具有出色的JSON支持时手动创建字符串?可以接受,但使用此方法可以在数组元素为int、float、,因此,当采用可编码协议时,这不是编码,而是字符串构建。好的,要补充这个问题,当arr=[1,2,3,4]可能是不同类型时,如何实现这一点?您自己尝试过吗?我的意思是,是你在扩展问题。我必须将此作为post参数传递,如何与问题中的格式完全匹配?请参见编辑,还要注意的是,post body需要数据,所以将en赋值给它,若我将对象转换为字符串
do {
    let jsonData = try JSONEncoder().encode(["id_list" : idArray])
    let jsonString = String(data: jsonData, encoding:.utf8)!
    print(jsonString) // {"id_list":[{"id":1},{"id":2},{"id":3}]}
} catch { print(error) }