在解构结构时,JSON输入意外结束

时间:2017-02-19 18:23:51

标签: go

你可以帮我理解为什么我总是在尝试将以下json解组为unexpected end of JSON input结构时遇到错误LimitOrder吗?

P.S。:如果我使用map[string]json.RawMessage而不是LimitOrder结构,我可以执行解组。

{
  "response_data": {
    "order": {
      "order_id": 3,
      "coin_pair": "BRLBTC",
      "order_type": 1,
      "status": 4,
      "has_fills": true,
      "quantity": "1.00000000",
      "limit_price": "900.00000",
      "executed_quantity": "1.00000000",
      "executed_price_avg": "900.00000",
      "fee": "0.00300000",
      "created_timestamp": "1453835329",
      "updated_timestamp": "1453835329",
      "operations": [
        {
          "operation_id": 1,
          "quantity": "1.00000000",
          "price": "900.00000",
          "fee_rate": "0.30",
          "executed_timestamp": "1453835329"
        }
      ]
    }
  },
  "status_code": 100,
  "server_unix_timestamp": "1453835329"
}

LimitOrder struct

type LimitOrder struct {
  OrderId int `json:"order_id"`
  CoinPair string `json:"coin_pair"`
  OrderType int `json:"order_type"`
  Status int `json:"status"`
  HasFills bool `json:"has_fills"`
  Quantity float64 `json:"quantity,string"`
  LimitPrice float64 `json:"limit_price,string"`
  ExecutedQuantity float64 `json:"executed_quantity,string"`
  ExecutedPriceAvg float64 `json:"executed_price_avg,string"`
  Fee float64 `json:"fee,string"`
  Operations []*Operation `json:"operations"`
  CreatedTimestamp string `json:"created_timestamp"`
  UpdatedTimestamp string `json:"updated_timestamp"`
}

这就是我试图解组它的方式

func (limitOrder *LimitOrder) UnmarshalJSON(buf []byte) error {

  tmp := make(map[string]json.RawMessage)
  if err := json.Unmarshal(buf, &tmp); err != nil {
    return err
  }

  tmp2 := make(map[string]json.RawMessage)

  if err := json.Unmarshal(tmp["response_data"], &tmp2); err != nil {
    return err
  }

  if err := json.Unmarshal(tmp2["order"], limitOrder); err != nil {
    return err
  }

  return nil
}

1 个答案:

答案 0 :(得分:0)

我在golang-nuts组找到了一些帮助。您可以在https://groups.google.com/forum/#!topic/golang-nuts/SZXBcXgUoo0查看答案。长话短说,问题在于我的结构,我只为整个json的一小部分构建了结构,所以我修复了整个json响应的构建结构。