2017-11-04 35 views
0

完全なJsonを得るためのコードはここにあります。スウィフト4 Jsonエンコーディングとデコード

var str = "Hello" 
var dictionary = ["key1":"val1", "key2":"val2", "key3":"val3"] 

var products = [Product]() 

struct Product: Codable { 
    var title: String 
    var reference: String 
} 

func createProducts(title: String, refer: String) { 
    products.append(Product(title: title, reference: refer)) 
} 

for element in dictionary { 
    createProducts(title: element.key, refer: element.value) 
} 

var general = [str: products] 

let encodedData = try? JSONEncoder().encode(general) 
let json = String(data: encodedData!, encoding: .utf8)! 
print(json) 

My Json dictは次のとおりです。

{"Hello":[{"title":"key2","reference":"val2"},{"title":"key3","reference":"val3"},{"title":"key1","reference":"val1"}]} 

そして、Jsonのデコード後、私はこの部分を取得する必要があります。

[{"title":"key2","reference":"val2"},{"title":"key3","reference":"val3"},{"title":"key1","reference":"val1"}] 

「Hello」の値を取得するには、以下のデコーダで問題があります。

if let decodedData = try! JSONDecoder().decode(general.self, from: json.data(using: .utf8)!) { 
    print(decodedData) 
} 

答えて

2

は、符号化されたJSONの実際の種類は[String:[Product]]のようにデコードし、あるいは傘をRoot構造体

struct Root : Decodable { 
    private enum CodingKeys : String, CodingKey { case hello = "Hello" } 
    let hello : [Product] 
} 

を作成Hello

do { 
    let decodedData = try JSONDecoder().decode([String:[Product]].self, from: Data(json.utf8)) 
    print(decodedData["Hello"]!) 
} catch { 
    print(error) 
} 

の値を取得し、復号化され

do { 
    let decodedData = try JSONDecoder().decode(Root.self, from: Data(json.utf8)) 
    print(decodedData.hello) 
関連する問題