如何遍历一个对象数组并创建一个 json 对象?

Posted

技术标签:

【中文标题】如何遍历一个对象数组并创建一个 json 对象?【英文标题】:how to loop through an array of objects and create a json object? 【发布时间】:2019-06-27 13:48:23 【问题描述】:

我有一个由 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
    

非常感谢你们的帮助!

【问题讨论】:

嗨@mar​​k,你从哪里得到JSON数据?服务还是参与项目? 你检查过Codable吗? 是否和:***.com/questions/42081141/…一样? 嗨@Emre 这是一项服务 嘿@Ahmed 不,这不是同一个结构我可以创建一个对象数组的结构 [obj,obj,obj] 就像您发布的示例一样,但这是另一种格式键:值,键:值,键:值 【参考方案1】:

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

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

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

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

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)

【讨论】:

谢谢 Joakim 你救了我!【参考方案2】:

你可以试试下面的代码:

注意:我自己创建了 json obj 用于评估目的,你可以直接使用你的 json。

    let json = [
        [
        "publicationId":11,
        "createdAt":"2019-06-18 21:29:21",
        "id":77063,
        ],
        [
            "publicationId":12,
            "createdAt":"2019-06-18 21:29:21",
            "id":77065,
        ],
        [
            "publicationId":13,
            "createdAt":"2019-06-18 21:29:21",
            "id":77066,
        ]
        ]

 var jsonArr: [[String:Any]] = [[String:Any]]()
        for obj in json 
            let id = obj["id"] as! Int
            let jsonObj = [
                "\(id)": obj["createdAt"] as! String
            ]
            jsonArr.append(jsonObj as [String : Any])
        
        print(jsonArr)

【讨论】:

嘿@Bhavik!谢谢你的回复,所以首先我的数组不包含 json 它包含从传递的 json 格式创建的对象,其次我测试了你的代码,它给了我这种格式:[[“77063”:“2019-06-18 21 :29:21"], ["77065": "2019-06-18 21:29:21"], ["77066": "2019-06-18 21:29:21"]] 但它没有匹配我想要的格式,谢谢你的尝试【参考方案3】:

您可以创建一个空字典,然后遍历 json 数组并取出 idcreatedAt。使用idcreatedAt 更新字典。最后将此字典设置为新字典中availableParutions的值。

代码:

    var map: [Int: Any]  = [:]
    for item in json 
        let id = item["id"] as! Int
        map[id] = item["createdAt"]!
    
    let outerObject = ["availableParutions": map]
    print(outerObject)

【讨论】:

以上是关于如何遍历一个对象数组并创建一个 json 对象?的主要内容,如果未能解决你的问题,请参考以下文章

jquery each如何遍历出这样的json到页面

如何在java中遍历json对象的json数组

js怎么遍历json的数组并输出到html中

java如何遍历json 请具体点

python中如何遍历json数组

Ruby - 遍历数组并创建一个三列 x 行的表