在Swift中将数组元素转换为合适的json
我有一个数字数组,比如[1,2],我想将其转换为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
["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) }