J'ai la structure JSON comme:
public struct WorldTradingIntradayData: Decodable { let symbol : String let stock_exchange_short : String let timezone_name : String let intraday : Intraday? } public struct Intraday: Decodable { let dateTime: WorldTradingIntradayDetails public struct WorldTradingIntradayDetails: Decodable { let open : String let close : String let high : String let low : String let volume : String }
5 Réponses :
Remplacez avec p> et complètement débarrasser de structure publique intraday: décodable { code> < / p> p>
Demandez à JSON Creator d'envoyer les données au format ci-dessous, vous devez avoir une clé constante pour analyser.
2019-12-20 15:59:00 CODE> Le temps ne doit pas être utilisé comme clé
Demander au propriétaire de l'API de changer le format est le plus souvent une voie à suivre et spécialement pour quelque chose comme celui-ci qui ressemble à une API d'une tierce partie.
C'est toi qui a posté une réponse, pas moi
Ne vous dérange pas, je demande juste la réponse de la question actuelle :) Je cherche également la réponse, comment analyser ce scénario.
Si vous recherchez également une réponse à la question ci-dessus, pourquoi poster une réponse comme celle-ci?
J'ai essayé de demander à l'entreprise de modifier le format comme vous l'aviez recommandé, dans lequel ils m'ont dit "Vous pouvez le faire en ajoutant et formaté = false à votre demande."
Oui Shabbir, il a changé le format en {"Symbole": "Snap", "Stock_exchange_short": "NYSE", "TimeZone_Nam E": "America / New_York", "intraday": [{"Date": " 2020-01-08 15:59:00 "," Données ": {" Open ":" 16.66 "," Fermer ":" 16,67 "," High ":" 16. 68 "," LOW ":" 16.66 "," V Olume ":" 221296 "}} alors maintenant je devrais pouvoir le faire correctement
Je pense que cela devrait être considéré comme une chaîne, alors si vous souhaitez le convertir en une date, vous devrez modifier le t code> pour l'espace pour créer un
DateFormatter Code>:
struct WorldTradingIntradayData: Decodable {
let symbol: String
let stockExchangeShort: String
let timezoneName: String
let intraday: [String: Intraday]
enum CodingKeys: String, CodingKey {
case symbol
case stockExchangeShort = "stock_exchange_short"
case timezoneName = "timezone_name"
case intraday
}
}
struct Intraday: Decodable {
let intradayOpen: String
let close: String
let high: String
let low: String
let volume: String
enum CodingKeys: String, CodingKey {
case intradayOpen = "open"
case close
case high
case low
case volume
}
}
J'ai ajouté et formaté = FALSE à la demande d'URL et obtenu un format différent, qui a fonctionné normalement et était facile à manipuler. p>
C'est trop tard pour répondre, mais il suffit d'ajouter le code complet si quelqu'un en a encore besoin.
struct WorldTradingIntradayData: Codable { let symbol: String let stock_exchange_short: String let timezone_name: String let intraday: [String: DataModel] } struct DataModel: Codable { let open: String let close: String let high: String let low: String let volume: String } let resultsJson = """ { "symbol": "SNAP", "stock_exchange_short": "NYSE", "timezone_name": "America/New_York", "intraday": { "2019-12-20 15:59:00": { "open": "15.55", "close": "15.55", "high": "15.55", "low": "15.52", "volume": "670218" }, "2019-12-20 15:58:00": { "open": "15.55", "close": "15.55", "high": "15.55", "low": "15.54", "volume": "284225" } } } """.data(using: .utf8)! do { let reponseData = try JSONDecoder().decode(WorldTradingIntradayData.self, from: resultsJson) //get all dates let dateArray = reponseData.intraday.keys.map{$0} print(dateArray) // use the data from `intraday` array like this to get the data for date in dateArray { let data = reponseData.intraday[date] print(data?.open) } }
dans votre décodeur implémenter
do / attrape code> pour vous aider à comprendre l'erreur
intraday code> doit être une matrice au lieu d'un objet!
Est-ce que cela répond à votre question? Comment analyser un Bloc de données JSON au lieu de toute la séquence JSON