首页 > 解决方案 > 将 JSON 对象转换为新数组

问题描述

如何使用 Swift 将 JSON 结构转换为新数组?

初始 JSON

{
  "group1": {
    "1/30/21": 100,
    "1/31/21": 200
  },
  "group2": {
    "1/30/21": 200,
    "1/31/21": 300
  },
  "group3": {
    "1/30/21": 300,
    "1/31/21": 500
  }
}

我想转换的数组如下:

[
  {
    "group1": 100,
    "group2": 200,
    "group3": 300,
    "date": "1/30/21",
  },
  {
    "group1": 200,
    "group2": 300,
    "group3": 500,
    "date": "1/31/21",
  }
]

标签: arraysjsonswift

解决方案


首先用于JSONSerialization将json转换为字典

let dictionary = try JSONSerialization.jsonObject(with: jsonIn.data(using: .utf8)!) as! [String: [String: Int]]

然后分两步转换为预期格式,首先创建一个字典,其中日期是键,组和数字(作为元组)是值

var temp = [String: [(String, Int)]]()

dictionary.forEach { key, value in
    for (innerKey, innerValue) in value {
        temp[innerKey, default: []].append((key, innerValue))
    }
}

然后使用这个字典创建字典数组

let output = temp.map { (key, tuples) -> [String: Any] in
    var result = [String: Any]()
    for tuple in tuples {
        result[tuple.0] = tuple.1
    }
    result["date"] = key
    return result
}

然后回到json

let jsonOut = try JSONSerialization.data(withJSONObject: output)

推荐阅读