首页 > 解决方案 > 如何遍历一个对象数组并创建一个 json 对象?

问题描述

我有一个由 300 个对象组成的数组,每个对象包含许多参数,我想遍历数组以创建一个仅包含两个参数的 JSON 对象。我的对象是从数组中的这个 json 结构创建的:

 "publicationId": 13,
            "name": null,
            "code": "FIGA_20190516",
            "parutionDate": "2019-05-16",
            "quadri": "FIGA",
            "ratio": null,
            "numero": "0",
            "createdAt": "2019-06-18 21:29:21",
            "nbPages": 0,
            "search": 1,
            "down": 1,
            "thumb_height": 0,
            "quartPageWidth": 0,
            "quartPageHeight": 0,
            "pdfHeight": "0",
            "pdfWidth": "0",
            "PDF": "2019-06-18 21:29:21",
            "XML": null,
            "SendKM": "2019-06-18 21:29:21",
            "KM": null,
            "Melody": null,
            "filename": null,
            "SendNormalize": null,
            "Normalized": null,
            "librelioSubTitle": null,
            "SendProcessArticle": null,
            "ProcessedArticles": null,
            "melodyCallBackUrl": null,
            "htmlMilibris": false,
            "htmlHarry": false,
            "sendProcessLibrelio": null,
            "processedLibrelio": null,
            "id": 77066,
            "_solrDocument": {},
            "_repository": "FIGA/2019/05/FIGA_20190516/"

我想循环遍历数组来创建一个带有这个结构的 JSON 对象:

"availableParutions" : {
        id : createdAt,
        id : createdAt,
        id : createdAt
    }

我真的很感谢你们的帮助!

标签: jsonswift

解决方案


您可以在 Json 输出中创建一个表示所需数据的新结构

struct NewStruct: Encodable {
    let id: Int
    let createAt: String
}

此结构符合 Encodable ,因此可以将其编码为 json,但由于它非常简单,因此不需要额外的编码

然后你可以将你的大对象数组转换为NewStruct使用数组map

let newArray = array.map { NewStruct(id: $0.id, createAt: $0.createdAt) }

如果我理解正确,这个数组应该是一个名为“availableParutions”的属性,所以让我们为 json 创建一个外部结构

struct Output: Codable {
    let availableParutions: [NewStruct]
}

并加载它

let output = Output(availableParutions: newArray)

并对其进行编码

do {
    let jsonData = try JSONEncoder().encode(output)
} catch {
    print(error)
}

推荐阅读