2017-11-30 3 views
0

特定のJSONをWebサーバーに配信する必要がありますが、正しい配列と辞書を使用する方法については非常に混乱していますので、最終結果には至りません。私は1つだけ「エントリ」を持つことができ、サーバおよび特定の「ID」を持ついくつかの「メンバー」と「名前」とタイムスタンプを送信する必要がJSONファイル内Swift 4で特定のJsonを作成する

["entries": [ 
       "member" : [ 
          "id" : key, 
          "name" : value 
          ], 
       "timestamp" : "\(dateString)" 
       ] 
] 

:私はこのことから始めています。私は辞書を使用する必要があることを認識していますが、この結果を得ることはできません。これは私が料理しようとしたものです:jsonDictでのキーが存在してはならないので、

var leden = [Int: String]() 
var jsonDict = [String: Any]() 
var dateString = Date() 

for (key, value) in leden{ 

     jsonDict["\(key)"] = ["member" : [ 
              "id" : key, 
              "naam" : value 
              ], 
           "timestamp" : "\(dateString)" 
          ] 
    } 
    jsonFinaal = ["entries": jsonDict] 

これは私が得ることができる限り近いが、十分に良いですが、私はこれを行うために第2の辞書に「エントリ」を追加しました一意のエントリ。

私は解決策を助けるためにベターを行うことができますか?

+1

let leden = [1 : "Foo", 2: "Bar"] let sortedKeys = leden.keys.sorted() let dateString = Date() var members = [[String:Any]]() for key in sortedKeys { let naam = leden[key]! members.append(["member" : ["id" : key, "naam" : naam], "timestamp" : "\(dateString)"]) } let entries = ["entries": members] print(entries) 

とJSON文字列によってソート構造を作成しますSwift4は、 'Encodable'プロトコルではずっと簡単です。構造体としてデータをモデル化し、エンコード可能な適合性を宣言し、 'CodingKeys'列挙型を目的のWebサーバーが使用するケーシングに合わせて設定することができます。その後、 'JSONEncoder()。encode(encodable)'を使って準備が整うはずです。これは、 'URLRequest'の' httpBody'プロパティに追加できるデータを与えます。 – Rygen

答えて

0

membersの値が辞書の配列ではなく、辞書

これはidキー

do { 
    let jsonData = try JSONSerialization.data(withJSONObject: entries) 
    let json = String(data: jsonData, encoding: .utf8) 
    print(json) 
} catch { print(error) } 
+0

こんにちはヴァディアン、私はこれが正しいフォーマットであると思っています。私はちょうど新しいプレイグラウンドにあなたのソリューションをコピー/ペーストします。次に私は自分のプロジェクトにコピーしますが、私は "leden.keys.sorted"の理由についてはわかりませんが、私は回答のためにSwiftのドキュメントを見ていきます:-) greetings、Patrick –

+0

'leden'​​辞書が順序付けされていないため、ソートされた配列になります。また、あなたの構文 '(key、value)for leden {members.append(["メンバー ":[" id ":キー、" naam ":値]、..."を使用することもできます。順不同。 – vadian

関連する問題