【问题标题】:How to append JSON values into array using Swift 4?如何使用 Swift 4 将 JSON 值附加到数组中?
【发布时间】:2026-02-12 13:35:01
【问题描述】:

我正在尝试获取 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

【问题讨论】:

  • 如果没有add_user_product,tableviewcell中会显示什么数据?

标签: ios json swift tableview


【解决方案1】:

我建议使用nil 而不是null 字符串。

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

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

    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)

输出将是:

[Optional(10), nil, Optional(12), Optional(13), nil, nil]

PS:当您从这个addlistIDData 数组访问对象时,您需要使用if letguard let 强制转换一个对象。

【讨论】:

  • it's not id": nil my JSON add_user_product: 将显示值是否可用,它将显示 id 及其值。@Dharmesh Khan
  • 您可以在我的示例中添加值而不是 nil,您将看到该值附加到您的 addlistIDData 数组中。在操场上试一试。
  • Dharmesh kheni 你知道如何删除可选值,只要值从 JSON 附加到该数组中它的附加值 [nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, Optional (202)] 最后一个索引不是精确索引。
  • 我已经在回答中提到了这一点,但您可以在这里获得更多信息:*.com/questions/26347777/…
  • 我很伤心它不能正常工作。请参阅我的 JSON add_user_product 一些地方 null 和一些地方给出 ID 值。但是我从您的解决方案伙伴那里得到的所有值都为零。您能否再次检查一下我的 JSON 上方。它是值列表,我们需要检查 add_user_product null 如果它是 null 需要存储它,如果它提供值需要存储正确系列的值。预期输出:[10,null,11,.......] @Dharmesh Kheni
【解决方案2】:

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 {
   //
}

【讨论】:

  • 太棒了@Deepak 我可以将 0 更改为 nill 吗?
  • 我的数组显示为 [Optional(190), Optional(191), Optional(192), Optional(195), Optional(193)] @Deepak
【解决方案3】:

你可以这样做:

 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")
    }

希望对您有所帮助。

【讨论】:

  • 哇太棒了,但我收到错误,例如无法使用类型为 '(String, Int)' 的参数列表调用类型为 'Formatter' 的初始化程序 @PiyushRathi
  • 很抱歉,我收到无法将“String”类型的值转换为预期的参数类型“Int?”因为我正在维护我的数组 var resultArray: [Int?] = [] not String.How to fit this @PiyushRathi
  • 哦,你已经拿了 resultArray is Int ok 会这样更新
  • 很好,但我得到的输出类似于 [Optional(190), Optional(191), Optional(192), Optional(195), Optional(193)]。如何删除选项也没有零值。 @PiyushRathi
  • 是的,哥们知道了,继续努力,很快就会告诉你。
【解决方案4】:

您可以使用compactMap:

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

输出:

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

【讨论】:

  • 我认为这与我的问题完全相反。我正在尝试从数组中删除选项也没有零值
  • 你的输入数组是什么?您可以使用 compactMap func 从数组中删除 nil
最近更新 更多