Unmarshal JSON Array в объект JSON - PullRequest
       50

Unmarshal JSON Array в объект JSON

0 голосов
/ 28 октября 2019

Я пытаюсь работать с API, который возвращает данные JSON. В JSON вложен массив объектов. Данные структурированы, и я пытаюсь преобразовать этот массив в объект, но я подхожу с пустыми руками.

Другими словами, у меня есть это:

{
  "summary": {
    "distances": [
      {
        "activity": "total",
        "distance": 2.83
      },
      {
        "activity": "tracked",
        "distance": 2.83
      },
      { ... },
      { ... },
      { ... },
      { ... },
      { ... }
    ]
  }
}

И я хотел бы иметь что-то вроде этого:

  "summary": {
    "distances": {
       "total": 2.83,
       "tracked": 2.83,
       ...
    ]
  }
}

Я написал код, который отменяет маршалингJSON, но он работает только в том случае, если формат структуры такой же, как у JSON: https://play.golang.org/p/jsu_Ym8kRQd

1 Ответ

1 голос
/ 28 октября 2019

Вы не можете делать то, что хотите, используя стандартную библиотеку JSON. Я не знаю ни одного стороннего JSON Unmarshaler, который может сделать это. Вы должны разархивировать JSON в промежуточную структуру, которая соответствует вашему вводу, а затем преобразовать ее в нужную вам структуру. Если структура distances одинакова для всех элементов, и если вы пытаетесь преобразовать этот входной JSON в желаемый выходной JSON, вы можете сделать это с помощью простой структуры, например:

type Result struct {
  Distances map[string]float64
}

func process(input []byte) Result {
  var data InputStruct
  json.Unmarshal(input,&data)
  dest:=Result{Distances:make(map[string]float64)}
  for _,dist:=range data.Distances {
     dest.Distances[dist.Activity]=dist.Distance 
  }
  return dest
}
...