我正在尝试获取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
答案 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 let
或guard 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)]