当前位置: 首页 > 面试题库 >

在特定结构中解组Json数据

姬高澹
2023-03-14
问题内容

我想在Go中解组以下JSON数据:

b := []byte(`{"Asks": [[21, 1], [22, 1]] ,"Bids": [[20, 1], [19, 1]]}`)

我知道该怎么做,我这样定义一个结构:

type Message struct {
    Asks [][]float64 `json:"Bids"`
    Bids [][]float64 `json:"Asks"`
}

我不知道的是,是否有一种简单的方法可以对此进行专门化处理。我想在拆封后以如下格式获取数据:

type Message struct {
    Asks []Order `json:"Bids"`
    Bids []Order `json:"Asks"`
}

type Order struct {
    Price float64
    Volume float64
}

这样我可以在像这样解组后稍后使用它:

m := new(Message)
err := json.Unmarshal(b, &m)
fmt.Println(m.Asks[0].Price)

我真的不知道如何在GO中轻松或习惯地执行此操作,因此我希望有一个不错的解决方案。


问题答案:

您可以通过在结构上实现json.Unmarshaler接口来实现Order。这样的事情应该做:

func (o *Order) UnmarshalJSON(data []byte) error {
    var v [2]float64
    if err := json.Unmarshal(data, &v); err != nil {
        return err
    }
    o.Price = v[0]
    o.Volume = v[1]
    return nil
}

这基本上表示Order应该从2个元素的float数组中解码类型,而不是从结构(对象)的默认表示中解码。

您可以在此处 尝试使用此示例: http
//play.golang.org/p/B35Of8H1e6


 类似资料:
  • 问题内容: 我正在尝试解析一个包含JSON数据的文件: 由于这是带有动态键的JSON数组,因此我认为我可以使用: 但是,我无法使用来解析文件: 将包含JSON数据的文件解析为Go结构的最简单方法是将数组(仅字符串类型转换为字符串类型)? 编辑: 要进一步详细说明可接受的答案-的确,我的JSON是地图数组。为了使我的代码正常工作,该文件应包含: 然后可以将其读入 问题答案: 这是因为您的json实际

  • 问题内容: 我想将以下JSON解组到结构中: 我试图以各种方式修改,但是结构始终为空: 输出: 过去使用的JSON没有括号,因此我怀疑问题与它们有关。 有人可以帮忙吗? https://play.golang.org/p/pymKbOqcM- 问题答案: 发生这种情况是因为其他包()无法访问私有字段(即使具有反射)。在私有语言中,私有字段是以小写字母开头的字段。要解决此问题,请使您的结构包含公共字

  • 问题内容: http://play.golang.org/p/f6ilWnWTjm 我正在尝试解码以下字符串,但仅获取空值。 如何在Go中解码嵌套的JSON结构? 我想将以下内容转换为地图数据结构。 问题答案: 在Go中使用嵌套结构来匹配JSON中的嵌套结构。 这是一个如何处理示例JSON的示例: 游乐场链接 您还可以对内部结构使用匿名类型: 游乐场链接 或外部和内部结构: 游乐场链接 如果您不知

  • 问题内容: 我想解组结构定义为: 使用似乎只对使用的,而忽略了场:https://play.golang.org/p/WUBfzpheMl 我有一个笨拙的解决方案,我可以手动设置该字段,但是我想知道是否有人可以使用一种更清洁或更简单的方法来进行设置。 谢谢! 问题答案: 发生这种情况是因为嵌入在中。这意味着当json库调用unmarshaler时,它最终以on调用了。 因此,在内部,参数包含整个j

  • 问题内容: 是否可以在不对原始类型进行硬编码的情况下将JSON解组到由反射构成的结构中? 在此示例中,我使用了强制转换。但是,如果我不知道类型怎么办? 当我仅用于解组时,该结构将被清零。 当我省略演员表时,我会得到一张地图。这是可以理解的 问题答案: 这里的问题是,如果您在此处省略类型断言: 该推断有型。 然后,当您将地址解组时,类型为(指向interface {}的指针),并且解组无法按预期工作

  • 我关注了 json 根据给出的答案,我尝试了以下 我得到一个空数组,有如下错误。有什么建议吗? json:无法将数组解组为map[string]*json.RawMessage类型的Go值