如何解码包含日期信息的JSON?

问题描述 投票:0回答:3

我的JSON结构为:

"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"
    },
   ...
}

关于如何实现日期信息的任何想法我试图这样解析它:

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
    }

但是它没有按预期的方式工作。关于如何做到这一点的任何想法?

ios json swift xcode structure
3个回答
0
投票

替换

let intraday : Intraday?

with

let intraday : [String:WorldTradingIntradayDetails]

并且完全摆脱了public struct Intraday: Decodable {


0
投票

我认为应该将其视为字符串,然后,如果要在日期中进行转换,则需要更改T的空格以创建dateFormatter

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
    }
}

-1
投票

要求json创建者以以下格式发送数据,您需要具有一个常量密钥才能进行解析。2019-12-20 15:59:00时间不应该用作键


    "intraday": [
            "dateTime": "2019-12-20 15:59:00",
            "data": {
                "open": "15.55",
                "close": "15.55",
                "high": "15.55",
                "low": "15.52",
                "volume": "670218"
            },
            "dateTime": "2019-12-20 15:59:00",
            "data": {
                "open": "15.55",
                "close": "15.55",
                "high": "15.55",
                "low": "15.52",
                "volume": "670218"
            }
    ]

© www.soinside.com 2019 - 2024. All rights reserved.