【发布时间】:2021-04-27 12:06:18
【问题描述】:
我正在尝试从 API 调用解析响应对象,但遇到了一些困难。
首先,我使用以下内容解析返回的 JSON:
let responseObject = (try? JSONSerialization.jsonObject(with: data)) as? [String: Any]
if let result = responseObject["result"] {
print(result)
}
然后,当我记录结果时,我得到以下结果:
{
"_links" = {
next = "/api/3/action/datastore_search?limit=50&id=22f223e7-73f7-4842-935c-80a0ba5c3e5b&offset=50";
start = "/api/3/action/datastore_search?limit=50&id=22f223e7-73f7-4842-935c-80a0ba5c3e5b";
};
fields = (
{
id = "_id";
type = int;
},
{
id = package;
info = {
label = "";
notes = "Unique, normalized, name of dataset.
"type_override" = "";
};
type = text;
}
)
}
我再次尝试解析:
let finalResult = (try? JSONSerialization.jsonObject(with: result)) as? [String: Any]
但是,我收到以下错误:
对类方法“jsonObject”的调用没有完全匹配
更新
if let result = responseObject["result"] as? [String: Any] {
if let finalResult = result["records"] {
print(finalResult)
}
}
当我记录这个时,我得到以下信息:
(
{
"_id" = 186;
accessibility = 1;
completeness = "0.6899999999999999";
freshness = "0.5";
grade = Silver;
"grade_norm" = Silver;
metadata = "0.84";
package = "air-conditioned-and-cool-spaces-heat-relief-network";
"recorded_at" = "2019-12-17T20:24:09";
score = "0.78";
"score_norm" = "0.76";
usability = "0.86";
version = "v0.1.0";
},
{
"_id" = 187;
accessibility = 1;
completeness = 1;
freshness = 0;
grade = Bronze;
"grade_norm" = Bronze;
metadata = "0.25";
package = "air-conditioned-public-places-cooling-centres";
"recorded_at" = "2019-12-17T20:24:09";
score = "0.54";
"score_norm" = "0.31";
usability = "0.85";
version = "v0.1.0";
},
)
当我尝试迭代这个时:
for (key, value) in finalResult {
print("key", key)
print("value", value)
}
我收到以下错误:
元组模式不能匹配非元组类型的值
【问题讨论】:
-
你想用
finalResult做什么?你的结果已经是 json 对象了 -
@valosip 我想提取单个字段并将它们显示在用户界面上。
-
您的
result以NSDictionary的格式显示。您不应该重新解码它,而应该将其转换为[String: Any]并将其用作 Swift 字典。 -
@OOPer 谢谢。没想到是字典。我更新了问题(忽略数据差异。为简洁起见,我已将其截断)
-
请自行发布您的工作代码作为答案。