2017-01-05 3 views
3

JSONからデータを取得するアプリがあります。アプリケーションが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" 
     }, 
    ] 
} 

日付はDD/MM/YYの形式の文字列です。私が順番に記事を追加する場合は問題はありませんが、常に最新のものがトップに追加されますが、前回の記事を追加して前の場所に追加したい場合があります。

JSONを日付の値でアップロードする前に注文する方法はありますか?

+2

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辞書を並べ替えていないので、それに依存するべきではありません。 JSON記事のキー内で配列を使用し、その配列を日付順にソートすることをお勧めします。 –

答えて

1

それはすでに配列、ちょうどとても簡単、それを引くDateに変換し、それらを比較する必要がありますので:あなたのJSON値が来てもよいが

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

これは素晴らしい、と私は何をしようとしている間違いなく見えます。私はarticleArrayを取得するいくつかの問題を抱えています。私はSwifftyJSONを使用していますので、jsonはJSON形式であり、配列やdictに変換する方法を理解できません。あなたはこれを行う方法を知っていますか? – ghertyish

+1

私はそれをソートしたと思う、誰かを助ける場合に私の答えを加えた。 – ghertyish

+0

@ghertyishはswiftyJSONで更新されました。値を減算するのに便利な関数を使うことができます。タイプをキャストする必要はありません。複数回再作成する必要がないように 'dateFormatter'をブロックから移動してください。 – Tj3n

関連する問題