如何使用Swift 4将JSON值附加到数组中?

时间:2018-08-08 06:16:31

标签: ios json swift tableview

我正在尝试获取JSON值并将其追加到数组中。在这里,下面的代码add_user_product有机会出现null。如果是null,则需要将null附加到数组中;如果不是null,则还需要存储ID。

我正在尝试获取类似-[10,null,12,13,null,……]

的输出
 // add_user_products & If add_user_product == null need to store null otherwise add_user_product ["id"]
if let add_user_product = fields[“add_user_product"] as? [String : Any]  {

   let add_id  = add_user_product["id"] as! Int

    self.addlistIDData.append(add_id)
 }
 else {
    //print("Failure")
 }

在我的样本回复下面

{  
   "students":[  
      {  
         "grade":0,
         "add_user_product": 
            {  
               "id":10
            }
      },
      {  
         "grade":1,
         "add_user_product":null
      },
      {  
         "grade":2,
         "add_user_product": 
            {  
               "id":11
            }
      }
   ]
}

Expected output: [10,null,11,......] //This array I am going to use Tableview cell

4 个答案:

答案 0 :(得分:4)

我建议使用@Override public void getEmployeeDetailsForRedisTemplate(List<Employee> employee) { logger.info("Saving " + employee.size() + " record to redis template"); for (Employee emp : employee) { listOperations.leftPush(EnumConstants.EMPLOYEE_KEY.getValue(), emp); } } 而不是nil字符串。

将您的null类型声明为addlistIDData,其中[Int?]Int

考虑以下我为您创建的示例:

Optional

输出将是:

    var addlistIDData: [Int?] = [10, nil, 12, 13, nil]  //Created array just for example

    //created dict for testing purpose
    let fields: [String : Any]? = ["add_user_product": ["id": nil]]

    if let field = fields {

        if let add_user_product = field["add_user_product"] as? [String:Any] {
            let add_id  = add_user_product["id"] as? Int
            //now append your object here weather it's a nil or it has any value 
            addlistIDData.append(add_id)
        }
    }
    else {
        //print("Failure")
    }

    print(addlistIDData)

PS:从此[Optional(10), nil, Optional(12), Optional(13), nil, nil] 数组访问对象时,需要使用if letguard let投射对象。

答案 1 :(得分:1)

您可以这样做:

 var resultArray = [Int?]()
 if let add_user_product = fields["add_user_product"] as? [String: Any] {

        if let add_id = add_user_product["id"] as? Int {
            resultArray.append(add_id)
        } else {
            resultArray.append(nil)
        }
    } else {
        //print("Failure")
    }

希望这会有所帮助。

答案 2 :(得分:1)

null不会被识别,将其存储在数组中的唯一方法是将其存储为String,但是为此,您还必须将其他元素存储为String。

但是我建议不要添加null,而是添加0作为:

var arr = [Int]()
if let add_user_product = fields["add_user_product"] as? [String: Any] {

       if let productId = add_user_product["id"] as? Int {
            arr.append(productId)
        } else {
            arr.append(0)
        }
} else {
   //
}

答案 3 :(得分:1)

您可以使用compactMap:

let arrayDict = [ ["id" : 3], ["id" : nil], ["id" : 5] ]
let result = arrayDict.compactMap { $0["id"] }
print(result)

输出:

[Optional(3), nil, Optional(5)]