Прошу помощи с парсером


#1

Разбираюсь с парсером, пытаюсь получить информацию в формате json
Выдает ошибку, подскажите, что я делаю не так?

import UIKit
struct WebSiteDecodable: Decodable {
let Date: String?
let PreviousDate:String?
let PreviousURL: String?
let Timestamp: String?
let Valute: [valute]
}
struct valute: Decodable {
let ID: String?
let NumCode: String?
let CharCode: String?
let Nominal: Int?
let Name: String?
let Value: Double?
let Previous: Double?
}
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
let url = "https://www.cbr-xml-daily.ru/daily_json.js"
guard let urlObj = URL(string: url) else {return}
URLSession.shared.dataTask(with: urlObj) {(data, response, error) in
guard let data = data else {return}
do {
let webSiteDecodable = try JSONDecoder().decode(WebSiteDecodable.self, from: data)
print(webSiteDecodable.Valute.self)
} catch {
print("We got eny error")
}
}.resume()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}

#2
  1. Используйте кнопку для кода, так будет проще читать ваш код
  2. Какую ошибку выдает
  3. Попробуйте вывести в принт конкретную валюту

P.S. замените Decodable на Codable


#3

выдает: “We got eny error”

менял Decodable на Codable все то же самое…
я работаю на хакинтоше, это может быть причиной?

кстати, если url поменять на такой (http://www.cbr.ru/scripts/XML_daily.asp?date_req=02/03/2002) как должна поменяться структура?


#4
struct WebSiteDecodable: Codable {
    let date: Date
    let previousDate: Date
    let previousURL: URL
    let timestamp: Date
    
    struct Valute: Codable {
        let id: String
        let numCode: String
        let charCode: String
        let nominal: Int
        let name: String
        let value: Double
        let previous: Double
    }
    
    let valute: [String: Valute]
}


struct CustomKey: CodingKey {
    var stringValue: String
    init?(stringValue: String) {
        self.stringValue = stringValue == "ID" ?
            stringValue.lowercased() :
            stringValue.prefix(1).lowercased() + stringValue.dropFirst()
    }
    var intValue: Int?
    init?(intValue: Int) {
        return nil
    }
}

URLSession.shared.dataTask(with: URL(string: "https://www.cbr-xml-daily.ru/daily_json.js")!) { data, _, _ in
    guard let data = data else { return }
    let decoder = JSONDecoder()
    decoder.dateDecodingStrategy = .iso8601
    decoder.keyDecodingStrategy = .custom { CustomKey(stringValue: $0.last!.stringValue)! }
    let result = try? decoder.decode(WebSiteDecodable.self, from: data)
    print(result)
}.resume()

#5

Переделал парсер, он возвращает dictionary of arrays, как можно получить конкретное значение? (курс USD и EUR) (подскажите где эта кнопка? [quote=“RexHunt, post:2, topic:6678”]
Используйте кнопку для кода, так будет проще читать ваш код
[/quote]

import UIKit
import Alamofire
import SWXMLHash

class ViewController: UIViewController {

override func viewDidLoad() {
    super.viewDidLoad()

   
  let date = "02/03/2002"
    Alamofire.request("http://www.cbr.ru/scripts/XML_daily.asp?date_req=\(date)", parameters: nil) //Alamofire defaults to GET requests
        .response { response in
            if let data = response.data {
                print(data) // if you want to check XML data in debug window.
                //let xml = SWXMLHash.parse(data)
                let xml = SWXMLHash.parse(response.data!)
               // print(xml) // output the FilmID element.
                func enumerate(indexer: XMLIndexer) {
                    for child in indexer.children {
                        print(child.element!.name, child.element!.text)
                        enumerate(indexer: child)
                    }
                }
                
                enumerate(indexer: xml)
                
            }
    }
   

}
    


override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}