2017-01-05 4 views
3

У меня есть приложение, которое извлекает данные из JSON. Порядок JSON важен, поскольку приложение представляет свои данные в порядке JSON.Как я могу заказать мой JSON по строковой дате?

Я создал отдельное приложение, чтобы создать объект JSON, добавить его в остальную часть JSON и загрузить его. Проблема в том, что он добавляет его в начало файла JSON. Я хочу изменить порядок JSON, прежде чем он будет загружен по его значению даты.

Мой JSON в этом формате:

{ 
"articles": 
    [      
     { 
      "title":"Title 3", 
      "url":"URL 3", 
      "date":"04/01/17" 
     }, 

     { 
      "title":"Title 2", 
      "url":"URL 2", 
      "date":"03/01/17" 
     }, 

     { 
      "title":"Title 1", 
      "url":"URL 1", 
      "date":"02/01/17" 
     }, 
    ] 
} 

дата является строкой в ​​дд/ММ/формат уу. Если я буду добавлять статьи в порядок, тогда нет никаких проблем, так как самая новая всегда будет добавлена ​​в начало, но иногда я добавляю статьи из предыдущих дней, которые я хочу сложить на предыдущее место.

Есть ли способ заказать JSON, прежде чем он будет загружен через значение даты?

+2

Хотя ваше значение JSON может приходить в том порядке, в котором вы их вставляете, вы не должны зависеть от этого, поскольку словари неупорядочены. Я бы рекомендовал использовать массив в вашем ключе JSON, а затем отсортировать этот массив по дате. –

ответ

1

Поскольку это уже массив, просто нужно вычесть его, преобразовать в Date, и сравнить их, довольно легко:

let articleArray: [[String:String]] = dict["articles"]! 
let dateFormatter = DateFormatter() 
dateFormatter.dateFormat = "dd/MM/yy" 

dict["articles"] = articleArray.sorted { (first, second) -> Bool in 
    return dateFormatter.date(from: first["date"]!)! < dateFormatter.date(from: second["date"]!)! 
} 

SwiftyJSON:

if let articleArray = json["articles"].array { 
    let sorted = articleArray.sorted(by: { (first, second) -> Bool in 
     return dateFormatter.date(from: first["date"].stringValue)! < dateFormatter.date(from: second["date"].stringValue)! 
    }) 
} 
+0

Это выглядит потрясающе, и определенно, что я пытаюсь сделать. Однако у меня возникают проблемы с получением статьиArray. Я использую SwiftyJSON, поэтому мой json находится в формате JSON, и я не могу понять, как преобразовать его в массив или dict. Вы знаете, как это сделать? – ghertyish

+1

Я думаю, что я его отсортировал, я добавил свой ответ, если это поможет кому угодно. – ghertyish

+0

@ghertyish обновлен с swiftyJSON, вы можете использовать его функцию для более простого вычитания значения, вам не нужно бросать тип вокруг него, переместить 'dateFormatter' из блока, поэтому не нужно многократно воссоздавать – Tj3n

Смежные вопросы