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

时间:2018-08-16 09:51:00

标签: json swift

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

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

        {
            "id" : 2
        }
    ]
]

这可以在Swift中完成吗?

4 个答案:

答案 0 :(得分:0)

您可以尝试

struct Root :Codable {

    let  id_list:[InnerItem]
}

struct InnerItem : Codable {

    var  id:String

}

//

let arr = [1,2]

let js = Root(id_list:arr.map { InnerItem(id: "\($0)")})

do {

    let en = try JSONEncoder().encode(js)

    let json = String(data: en, encoding:.utf8)!

    print(json)

}
catch {

    print(error)
}

//

enter image description here

答案 1 :(得分:0)

尝试一下

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”}]}

答案 2 :(得分:0)

为此,您可以尝试使用带有for each循环的简单方法:

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}]]

答案 3 :(得分:0)

采用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_list": ... }[{"id_list": ... }],但不能为["id_list": ... ]