将JSON数组解组为JSON对象

问题描述 投票:-1回答:1

我正在尝试使用返回JSON数据的API。嵌套在JSON中的是一个对象数组。数据是结构化的,我正在尝试将该数组转换为对象,但是我空手而归。

换句话说,我有这个:

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

而且我想要这样的东西:

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

我已经编写了可解组JSON的代码,但是仅当struct的格式与JSON相同时才有效:https://play.golang.org/p/jsu_Ym8kRQd

json go marshalling unmarshalling
1个回答
1
投票

您无法使用标准库JSON包执行所需的操作。我不知道可以执行此操作的任何第三方JSON解组器。您必须将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
}
© www.soinside.com 2019 - 2024. All rights reserved.