Вызов API, работающий с `curl`, не работает в Swift - PullRequest
0 голосов
/ 01 июня 2019

Я получаю файл json из запроса http:

[
  {
    "_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 ]

1 голос
/ 01 июня 2019

Вам нужно разыграть от [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)
}
1 голос
/ 01 июня 2019

Прежде всего, если предполагается, что результат [[String:String]] приведен соответственно

guard let natRules = try? JSONSerialization.jsonObject(
  with: data) as? [[String:String]]
  else { return }

Для перебора массива используется цикл

for rule in natRules {
     print(rule)
}
0 голосов
/ 02 июня 2019

Мне не удалось дать достаточно точную выборку моего json-отклика - если есть пары ключ / значение с нестроковыми значениями, необходимо приведение к [[String:Any]]:

guard let natRules = try? JSONSerialization.jsonObject(
  with: data, options: []) as? [[String:Any]] 
  else { return }

Спасибо завсе ценные ответы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...