2015-05-21 31 views
2

我在使用Swift在JSON中创建特定结构时遇到问题。我使用Swifty JSON进行解析,但我无法弄清楚如何创建一个。在Swift中创建特定的JSON结构

我有这个数组,它由产品的Id和数量Ints填充到购物篮中。我需要将数组放入我的JSON中,但我不知道如何。

如果你能帮助我,我会很高兴:)

var productArray = Array<(id: Int,quantity: Int)>() 

    let jsonObject: [String: AnyObject] = [ 
     "order": 1, 
     "client" : 1, 
     "plats": [ 
      for product in productArray 
      { 
      "id": product.id 
      "quantity": product.quantity 
      } 
     ] 
    ] 
+0

此代码是否正在编译? – Blackus

+0

不行,只是“在容器文字预期的表达式”在行,我不知道如何做到这一点 – Dinosan0908

+1

你有'for'循环'''''''',这是绝对不允许的。你想要他们'平台'钥匙的价值是什么? – ABakerSmith

回答

1

你不能只是在定义你的字典时循环遍历东西。这是另一种方法。

首先,创建数组:

var productArray = Array<(id: Int,quantity: Int)>() 

添加一些产品(用于测试):

productArray += [(123, 1000)] 
productArray += [(456, 50)] 

地图这个数组字典的一个新的数组:

let productDictArray = productArray.map { (product) -> [String : Int] in 
    [ 
     "id": product.id, 
     "quantity": product.quantity 
    ] 
} 

使用在您的JSON对象中新映射的数组:

let jsonObject: [String: AnyObject] = [ 
    "order": 1, 
    "client" : 1, 
    "plats": productDictArray 
] 
+0

里面的一个数组谢谢你们,让它震撼吧! :)有一个美好的一天家伙:) – Dinosan0908

1

你不应该做任何类型的循环/条件使代码块,同时创造Array的或Dictionary的。为此,您需要在外部执行该代码段,创建一个变量并使用它。

请尝试这种方式。

var productArray = Array<(id: Int,quantity: Int)>() 

    var prods = [[String:Int]]() 
    for product in productArray 
    { 
     var eachDict = [String:Int]() 
     eachDict["id"] = product.id 
     eachDict["quantity"] = product.quantity 
     prods.append(eachDict) 
    } 

    let jsonObject: [String: AnyObject] = [ 
     "order": 1, 
     "client" : 1, 
     "plats": prods 
    ]