我正在从http请求中获取一个json文件:
[
{
"_ref": "Ref0",
"name": "someName0"
},
{
"_ref": "Ref1",
"name": "someName1"
},
{
"_ref": "Ref2",
"name": "someName2"
}
]
到目前为止,这是我的快速代码:
guard let natRules = try? JSONSerialization.jsonObject(
with: data, options: []) as? [Any]
else { return }
如何获取[String:String]
字典中数组项的内容?当我打印natRules
时,结果如下:
[
{
"_ref" = "Ref0";
"name" = "someName0"
},
{
"_ref" = "Ref1";
"name" = "someName1"
},
{
"_ref" = "Ref2";
"name" = "someName2"
}
]
我希望这些条目看起来像"_ref": "Ref0" ...
...
我在这里想念什么?
编辑(并向我发送消息):
似乎在上述示例中,我没有考虑非字符串值(这些值存在于我要处理的代码中),因此,基本上,如果存在非字符串值,强制转换为[[String:Any]]
。
所以这就是我的TIL ...
答案 0 :(得分:1)
首先,如果应该对结果进行[[String:String]]
转换,则
guard let natRules = try? JSONSerialization.jsonObject(
with: data) as? [[String:String]]
else { return }
要遍历数组,请使用循环
for rule in natRules {
print(rule)
}
答案 1 :(得分:1)
您需要从[Any]
投射到[[String: String]]
var result = [[String: String]]()
do {
if let natRules = try JSONSerialization.jsonObject(
with: data, options: []) as? [[String: String]] {
result = natRules
}
} catch {
print(error)
}
答案 2 :(得分:0)
我无法提供足够准确的json响应样本-如果存在具有非字符串值的键/值对,则必须强制转换为[[String:Any]]
:
guard let natRules = try? JSONSerialization.jsonObject(
with: data, options: []) as? [[String:Any]]
else { return }
感谢所有有价值的答案。