使用`curl`的API调用在Swift中不起作用

时间:2019-06-01 07:05:34

标签: json swift

我正在从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 ...

3 个答案:

答案 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 }

感谢所有有价值的答案。