检查 Jsonobject 是不是为 Int
Posted
技术标签:
【中文标题】检查 Jsonobject 是不是为 Int【英文标题】:Check Jsonobject for Int检查 Jsonobject 是否为 Int 【发布时间】:2018-01-10 00:14:34 【问题描述】:我有一个问题,我得到了一个 Json。数据来自字典。
这是一个示例 json:
Receivedtext:
"x": "pricef",
"b": "usd",
"ds": [
"tpr",
"avgp",
"mcap",
"ppc7D",
"ppc12h",
"ppc4h",
"ppc24h"
],
"data": [
[
"ADA/USD",
"0.819",
"21.23B",
"6.09",
"-5.45",
"-5.36",
"-10"
],
[
"AVT/USD",
"5.968",
"35.81M",
"24.33",
"-4.51",
"-3.3",
"6.65"
],
[
"BAT/USD",
"0.946",
"unknown",
null,
null,
null,
null
], [
"FUN/USD",
"0.000",
"0.00",
0,
0,
0,
0
] ]
通常json应该都是String。我可以处理 nill/null 但我不知道如何处理它的 Int/Double。
如果它是 Int/Double 我想用“未知”替换该值。
这是我目前的代码:
struct JsonMaintableWebsocket
let tpr: String?
let avgp: String?
let mcap: String?
let ppc7D: String?
let ppc12h: String?
let ppc4h: String?
let ppc24h: String?
init(json: [String?])
self.tpr = json[0]
self.avgp = json[1]
self.mcap = json[2]
self.ppc7D = json[3]
self.ppc12h = json[4]
self.ppc4h = json[5]
self.ppc24h = json[6]
static func fetchJsonWebsocketMaintable(json: Data) -> [JsonMaintableWebsocket]
var jsonWebsocket: [JsonMaintableWebsocket] = []
do
let jsonData = try JSONSerialization.jsonObject(with: json, options: []) as? [String: Any?]
if let data = jsonData!["data"] as? [[String?]]
for d in data
jsonWebsocket.append(JsonMaintableWebsocket(json: d))
catch let error
print(error.localizedDescription)
return jsonWebsocket
非常感谢!
【问题讨论】:
tpr
? avgp
?你希望别人如何阅读你的代码?/
请尝试改进您的问题:***.com/help/mcve
抱歉,怎样才能更好地阅读?这些是我想从 json 中获取的变量
【参考方案1】:
您可以处理此问题的一种方法是通过数组map
并检查存储的值类型,并采取相应措施。您可以更改这部分:
if let data = jsonData!["data"] as? [[String?]]
for d in data
jsonWebsocket.append(JsonMaintableWebsocket(json: d))
到这里:
if let data = jsonData!["data"] as? [[Any?]]
for d in data
let adjustedArray: [String?] = d.map(
//First, check to see if object is nil, and return nil if so
if $0 == nil
return nil
//Check to see if value is string, and return string
else if let stringValue = $0 as? String
return stringValue
//Otherwise return "unknown"
else
return "unknown"
)
jsonWebsocket.append(JsonMaintableWebsocket(json: adjustedArray))
通过添加更多选项,也可以轻松地将 Int
或 Double
处理为字符串:
if let data = jsonData!["data"] as? [[Any?]]
for d in data
let adjustedArray: [String?] = d.map(
if $0 == nil
return nil
else if let stringValue = $0 as? String
return stringValue
else if let intValue = $0 as? Int
return "\(intValue)"
else if let doubleValue = $0 as? Double
return "\(doubleValue)"
else
return "unknown"
)
jsonWebsocket.append(JsonMaintableWebsocket(json: adjustedArray))
【讨论】:
如果这解决了您的问题,请将此答案标记为解决方案,以便其他人知道问题已解决。以上是关于检查 Jsonobject 是不是为 Int的主要内容,如果未能解决你的问题,请参考以下文章
如何在获取值之前对JSONObject中的每个元素进行空检查?
解析为对象而不是数组时出现Json错误:JSONObject中的getJSONObject(java.lang.String)无法应用于(int)
java JsonObject怎么判断一个json串中是不是含有某个key值????
java.lang.String 无法从 Android 转换为 JSONObject
如何使用 ResponseEntity 返回 JSONObject 而不是 HashMap? (未找到类型返回值的转换器:类 org.json.JSONObject)