Преобразование объекта JSON в массив в swift 4

#ios #swift

#iOS #swift

Вопрос:

Я хочу получить доступ к некоторым данным из-под JSON, для этого мне нужно преобразовать JSON в формат массива

    URLSession.shared.dataTask(with: request) { (data, response, err) in
        guard let data = data else {return}
        do {
            let parsedData = try JSONSerialization.jsonObject(with: data, options: .mutableContainers) as! [String: Any]

            if let allResult = parsedData["fps"] as? [String: Any] {
                if let allDataProviders = allResult["dataProviders"] as? [String: Any] {
                    if let allData = allDataProviders["data"] as? [String: Any] {
                        if let allFieldValues = allData["ms.vss-work-web.new-work-items-hub-default-data-provider"] as? [String: Any] {
                            if let allFieldValuesData = allFieldValues["fieldValues"] as? [Any] {
                                for data in 0..<allFieldValuesData.count {
                                    print(allFieldValuesData[data])
                                }
                            }
                        }
                    }
                }
            }
        }
        catch let error {
            print(error)
        }
        }.resume()
 

ВЫВОД приведенного выше кода приведен ниже, поэтому из вывода я хотел получить 1957, историю пользователя и решить, как я могу ее получить

  {
data =     (
    1957,
    "User Story",
    "Design Project Dashboard",
            {
        distinctDisplayName = "Sumit Gupta <sumit.gupta@gmail.com>";
        identityRef =             {
            "_links" =                 {
                avatar =                     {
                    href = "https://orgName.visualstudio.com/_apis/GraphProfile/MemberAvatars/aad.ODJhNzk2MjgtZTNjYi03YmQxLTkyM2EtM2Q2ZDI3ZDIwNDUy";
                };
            };
            descriptor = "aad.ODJhNzk2MjgtZTNjYi03YmQxLTkyM2EtM2Q2ZDI3ZDIwNDUy";
            displayName = "Sumit Gupta";
            id = "1e741317-dc6a-41f5-b942-02dfa8a411f0";
            imageUrl = "https://orgName.visualstudio.com/_apis/GraphProfile/MemberAvatars/aad.ODJhNzk2MjgtZTNjYi03YmQxLTkyM2EtM2Q2ZDI3ZDIwNDUy";
            uniqueName = "sumit.gupta@gmail.com";
            url = "https://spsprodeus21.vssps.visualstudio.com/Acf2ada01-867f-4337-b722-208aa88fec4d/_apis/Identities/1e741317-dc6a-41f5-b942-02dfa8a411f0";
        };
    },
    Resolved,
    "VSO Client",
    "<null>",
    0,
    "/Date(1554882629083)/"
);
}
 

Комментарии:

1. Что именно вы напечатали? .mutableContainers не имеет значения. А как насчет использования Codable?

2. Примечание: вы могли бы избежать Pyramid Of Doom ™, используя guard инструкции.

3. @Larme для использования codable необходимо объявить свойство. Итак, некоторые имена свойств похожи на ms.vss-work-web.new-work-items-hub-default-data-provider возможно ли объявить свойство с тем же именем в swift?

4. Это свойство можно использовать, и вы можете использовать CodingKeys его для использования чего-то более короткого и более читаемого в вашей структуре.

5. @JoakimDanielson да, вы правы, но в json некоторые имена свойств похожи на ms.vss-work-web.new-work-items-hub-default-data-provider итак, можете ли вы подсказать мне, как я могу объявить имя свойства следующим образом