【问题标题】:Unmarshal JSON in JSON in Go在 Go 中以 JSON 格式解组 JSON
【发布时间】:2023-01-13 00:16:05
【问题描述】:

我想将一个字段包含一个 JSON 字符串的 JSON 对象解组为一个连贯的对象。我如何在 Go 中做到这一点?

例子:

输入:

{
  "foo":1,
  "bar":"{\\"a\\":\\"Hello\\"}"
}

去类型:

type Child struct {
    A string `json:"a"`
}

type Main struct {
    Foo int   `json:"foo"`
    Bar Child `json:"bar"`
}

我想我需要在其中一种类型上实现自定义 UnmarshalJSON 实现,但它让我绞尽脑汁想弄清楚是哪一个以及如何实现。

【问题讨论】:

  • 你想要的结果是什么?
  • 将字段 Bar 设置为键入 string,然后再次自行解组。如果您希望将其作为一个结构,则单独构建该结构。

标签: json go unmarshalling


【解决方案1】:

我猜您想将其视为 JSON 字符串只是周围 JSON 对象的一部分?如果是这样,那么是的,正如您所建议的,Child 上的自定义 UnmarshalJSON 方法应该可以完成此操作。

func (c *Child) UnmarshalJSON(p []byte) error {
    var jsonString string
    if err := json.Unmarshal(p, &jsonString); err != nil {
        return err // Means the string was invalid
    }
    var target struct {
        *Child
        UnmarshalJSON struct{} // Prevent infinite loop
    }{
        Child: c,
    }
    return json.Unmarshal([]byte(jsonString), &target)
}

【讨论】:

    猜你喜欢
    • 2017-07-11
    • 1970-01-01
    • 1970-01-01
    • 2016-12-16
    • 2020-10-07
    • 2023-03-14
    • 2021-07-13
    • 1970-01-01
    • 2012-06-19
    相关资源
    最近更新 更多