我已使用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)
然而,结果显示如下:
答案 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}
您可以详细了解map
,filter
和reduce
here
加成:
如果您要将实际的Date
对象拉出来,可以使用DateFormatter
,如下所示:
let formatter = DateFormatter()
formatter.dateFormat = "mm/DD/yyyy"
let dateObjectArray = justTheDatesArray.flatMap{formatter.date(from: $0)}