#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 итак, можете ли вы подсказать мне, как я могу объявить имя свойства следующим образом