Я имею дело с API, который возвращает данные JSON, такие как:
{
"bpi": {
"2018-06-01": 128.2597,
"2018-06-02": 127.3648
},
"disclaimer": "something here.",
"time": {
"updated": "Sep 6, 2013 00:03:00 UTC",
"updatedISO": "2013-09-06T00:03:00+00:00"
}
Однако данные о ценах, которые имеют сопровождающие даты, могут возвращать динамический диапазон дат (т. Е. Может быть что угодно от 1 пары данных до 1000).
Я пытаюсь взять только пары даты и цены и поместить их в карту для последующего потребления, но я не нахожу прямой способ сделать это. Когда я помещу это в генератор структуры автоматически, он создаст статически и названную структуру для оценки.
Это моя лучшая попытка динамической обработки данных. Я передаю пустой интерфейс из тела ответа http get, а именно:
var unstructuredJSON interface{}
json.Unmarshal(body, &unstructuredJSON)
и передача неструктурированного JSON в функцию:
func buildPriceMap(unstructuredJSON interface{}, priceMap map[string]float64) {
jsonBody := unstructuredJSON.(map[string]interface{})
for k, v := range jsonBody {
switch vv := v.(type) {
case string:
// Do Nothing
case float64:
priceMap[k] = vv
case interface{}:
buildPriceMap(vv, priceMap)
default:
log.Fatal("Json unknown data handling unmarshal error: ", k, vv)
}
}
Есть ли лучший способ сделать это?