ここに新しいとスウィフトので、私に簡単に行ってください。スウィフト4のJSON解析ヘルプ - データ構造の問題?
入れ子になった辞書を含むJSONを解析しようとするとちょっとスタックされています。私は、私が作成したデータストラテジで何かが間違っていると想像しています。私は修正するために全力を尽くしましたが、同じ問題がまだ発生しています。
これは、私が一緒に仕事しようとしていますJSON APIです: https://api.coindesk.com/v1/bpi/currentprice.json
これらは私がこのモデル化するために作成したデータ構造です:
struct base: Decodable {
let disclaimer: String
let bpi: [Bpi]
}
struct Bpi: Decodable {
let USD: [USD]
}
struct USD: Decodable {
let rate_float: Float
}
そして、ここでは、VCでの私のコードです:
override func viewDidLoad() {
super.viewDidLoad()
let jsonURLString = "https://api.coindesk.com/v1/bpi/currentprice.json"
guard let url = URL(string: jsonURLString) else {return}
URLSession.shared.dataTask(with: url) { (data, response, err) in
guard let data = data else {return}
do {
let bitcoinData = try JSONDecoder().decode(base.self, from: data)
print(bitcoinData.bpi)
} catch {
print("error")
}
} .resume() // Fires off the session
}
免責事項の文字列またはルート辞書の他の文字列からデータを取得できますが、そのとおりです。入れ子にされた双子座では何も解析することができません。ただキャッチエラーを返すだけです。ここで
はJSONです:
{
"time": {
"updated": "Nov 2, 2017 06:08:00 UTC",
"updatedISO": "2017-11-02T06:08:00+00:00",
"updateduk": "Nov 2, 2017 at 06:08 GMT"
},
"disclaimer": "This data was produced from the CoinDesk Bitcoin Price Index (USD). Non-USD currency data converted using hourly conversion rate from openexchangerates.org",
"chartName": "Bitcoin",
"bpi": {
"USD": {
"code": "USD",
"symbol": "$",
"rate": "6,889.4013",
"description": "United States Dollar",
"rate_float": 6889.4013
},
"GBP": {
"code": "GBP",
"symbol": "£",
"rate": "5,184.4053",
"description": "British Pound Sterling",
"rate_float": 5184.4053
},
"EUR": {
"code": "EUR",
"symbol": "€",
"rate": "5,910.4587",
"description": "Euro",
"rate_float": 5910.4587
}
}
}
は、私ははっきりとここに間違ってやっている何かがありますか?
事前にお手数をおかけしていただきありがとうございます。私の書式設定がうまくいけばごめんなさい! - それは動作しますこれでモデル次
:https://danieltmbr.github.io/JsonCodeGenerator/
をそれは次のような出力を生成します/ SwiftyJSON)。それらはあなたのための*ロット*簡単になります。 – LinusGeffarth
@LinusGeffarth SwifftyJSONは、JSON( 'Codable'プロトコルと' JSONEncoder'/'JSONDecoder')を扱うためのアップル独自の実装よりも優れていますか? –
私はSwiftyJSONを使ってJSON(data:Data)を入れてからループを介してアクセスし、 'json [キー "]。私はそれを簡単に見つける@ØyvindHauge – LinusGeffarth