如何在Swift 4中将分类的已解析的JSON项放入数组

时间:2018-02-08 12:30:58

标签: json swift

我已使用Decodable单独成功解析了JSON数据。 接下来我需要做的是将相同的项放入数组中。例如,这就是我为获取“日期”项目所做的工作:

struct Item : Decodable {
let date: String }

并使用以下命令在JSON解析器函数中检索它:

let items = try JSONDecoder().decode([Item].self, from: data!)

for info in items {
        print(info.date) }

如何将所述日期放在数组中?

(注意:JSON数据中有许多项目类别,包括:名称,日期,价格等,我只需要获取“日期”项目。)

到目前为止我尝试的是:

var itemDate = [String]() // declare an Array

// Inside the JSON parser function:
self.itemDate.append(info.date)
let dateArrays = [self.itemDate]
print(dateArrays)

然而,结果显示如下:

enter image description here

2 个答案:

答案 0 :(得分:0)

使用let dateArrays = [self.itemDate],您在数组中声明 数组(因此打印调用为[[]]。您只需直接使用变量itemDate即可(它已经是您的dates项目的数组)或者如果您愿意,请使用

let dateArrays = self.itemDate

没有方括号,它只是一个数组,而不是数组数组。

答案 1 :(得分:0)

map功能是您可以采用的一种方式。

从你的items数组中,你可以将Structs映射到一个只包含如此日期的数组:

let justTheDatesArray = items.map{$0.date}

或者,您可以在解码时执行此操作:

let items = try JSONDecoder().decode([Item].self, from: data!).map{$0.date}

您可以详细了解mapfilterreduce here

加成:

如果您要将实际的Date对象拉出来,可以使用DateFormatter,如下所示:

let formatter = DateFormatter()
formatter.dateFormat = "mm/DD/yyyy"
let dateObjectArray = justTheDatesArray.flatMap{formatter.date(from: $0)}