我目前正在寻找许多类似的问题。然而,使用旧版本的swift,它们中的大多数已经过时。例如:
Swift:测试零的选项
Swift如何检查来自Json的NULL值
“Any”的值类型没有成员“objectforKey”Swift 3转换
如何从JSON对象Swift 4中检索值
我发现了几个更相关的问题,但所解决的问题非常具体。
从理论上讲,操作似乎非常简单。如果值为null,则将其更改为空字符串“”
以下是我正在处理的数据示例:
{
"waybill" : "",
"city" : "",
"name" : "TESTING ",
"external_branch" : "",
"address" : "",
"name_from" : "",
"date" : "2018-09-14",
"province" : "",
"dept" : "A\/P",
"signature" : "",
"name_to" : "",
"trans_num" : 11,
"created_user" : "jsilvest",
"modified_datetime" : "0000-00-00 00:00:00",
"signature_timestamp" : "0000-00-00 00:00:00",
"mail_type" : "",
"comments" : null,
"received_name" : "TESTING",
"modified_user" : "",
"created_datetime" : "2018-09-14 14:03:18",
"country" : ""
}
请注意注释是空的,而不是空字符串“”。
还有更多相同格式的数据集,其注释结果相同为空。
这导致我的应用程序崩溃,我正在尝试创建一个条件将空值更改为“”。
以下是我的一些尝试:
let updateJson:String = jsonData[IndexPath][forKey:"customer"] as! String // ERROR cannot convert type of any object
if jsonData(forKey: "comments") == NSNull {
//ERROR Cannot call value of non function type 'json'
}
我读过之后开始觉得使用NSDictionary不是正确的方法。
下面是我用来查询API中JSON数据的函数。
static func queryAPI(query: String, completionHandler: @escaping (NSDictionary?, Error?) -> ()) -> () {
let url = GlobalVar.API_URL + query
let currentToken = #############
let headers: HTTPHeaders = [
"Content-Type": "application/json",
"Source": "########",
"Authorization": "########" + currentToken
]
print("currentToken: \(currentToken)")
Alamofire.request(url, headers: headers).responseJSON { response in
switch response.result {
case .success(let value):
let jsonData = value as! NSDictionary
completionHandler(jsonData, nil)
case .failure(let error):
completionHandler(nil, error)
}
}
}
任何帮助都会很好!
谢啦
编辑更新 ----- 解决
因为我对IOS和快速发展非常陌生。正如阿什利·米尔斯在回答中提到的那样,我创造了一个错误使用NSDictionary的大熔炉。我当时不知道这是一种不正确的方式,而且容易出错。
当使用下面的代码将json数据加载到我的表中时:
for (_, value) in jsonData["data"] {
self.mail.append(Mailing(transnum: value["trans_num"].int!, from: value["name_from"].string!, to: value["name_to"].string!, department: value["dept"].string!, trackingId: value["waybill"].string!, receivedDate: value["date"].string!, deliveryDate: value["date"].string!, comments: value["comments"].string!, signedFor: false, signature: value["signature"].string!, expanded: false))
}
我收到一个错误:在展开时意外发现null。如上所述,这是由于json中的注释产生的空值。
为了避免重组我使用NSDicpedia错误构建的整个应用程序。
我试图创建循环和检查以将空数据更改为空字符串。经过几个小时的尝试,由于NSDicpedia没有成功,我能够通过一个简单的解决方案解决问题:
从for
comments: value["comments"].string!
改为
comments: value["comments"].stringValue
摆脱我的错误,数据加载成功。
好的,首先不要在Swift中使用NSDictionary
(或NSArray
),你在丢弃类型信息。
所以你应该说…
let jsonData = value as! [String: Any]
completionHandler(jsonData, nil)
然后检查字典中的值…
let comments = jsonData["comments"]
然后
NSNull
是类,因此您需要测试…
if comments is NSNull
或
if comments == NSNull() // instance of NSNull
我正在尝试从Firebase数据库中获取当前用户的UID——原则上这是一个简单的任务。我正在遵循从Firebase留档管理用户的指南,但我仍然无法找到解决方案。我到处都看到firebase.auth()。在初始化期间不会定义当前用户——好极了。我使用侦听器代替,侦听器会按应有的方式触发。但是由于某种原因,当它触发时,user的值为空。 不知道我在这里做错了什么。我得到 打印到控制台。
我一直在此对象上收到JSON解析错误 “DC008”:“PD가격 $2.90/码에서 시작#10#10티앤티 난단에 나염작업#10#10나염비 \4000/YD(数字전사)#1010%损失#10#10판매가 수정 $7.30/码- 但我不知道哪个角色藏在这个物体里。 谁能帮帮我吗 字符串中的btw#10是从\n转换而来的
问题内容: 我想将表列更改为可为空。我用过了: 这会导致出现错误。正确的语法是什么? 问题答案: 假设(基于您之前的问题): 用您的实际数据类型替换。
回调类APIInterface 得到回应
问题内容: 我有一个将存储Number对象的列表。该列表将通过分析字符串列表来填充,其中每个字符串都可以表示Number的任何子类。 如何将字符串解析为通用数字,而不是特定的整数或浮点数? 问题答案: 数字不能实例化,因为它是抽象类。我建议传入数字,但是如果您设置为字符串,则可以使用任何子类来解析它们, 要么 @请参阅NumberFormat
类: JSON数据: {“列表”:[{“类型”:0,“文本”:“文本1”},{“类型”:1,“问题”:“文本2”}]} 类来保存列表项: 一切顺利,我为JSON字符串中的type和text获得了正确的值。但逮捕仍为空。