我正在try 根据我得到的响应创建一个 struct . 我无法控制响应,在它的 struct 中有一些字段名使用逗号作为字段名本身的一部分

JSON示例:

        "date": "2022-09-09 00:00:00 UTC",
        "Sum": {
            "Change, %": "0.10",
            "Price": "254",
            "Value, $": "455.26",
            }

当try 以"常规"方式创建 struct 时,我收到一个错误,因为一旦我使用逗号字符,reflect.StructTag.Get就需要一些特定的东西,而不是名称的其余部分. struct 示例:

Date   string `json:"date"`
Sum    struct {
    Change  string `json:"Change, %"`
    Price   string `json:"Price"`
    Value   string `json:"Value, $"`
} `json:"Sum"`

我收到的错误是: " struct 字段标记json:"Value, $"与反射不兼容.StructTag.Get: struct 标记值中的可疑空格"

我们的目标是在以后操作和使用这些数据(希望使用我的简单名称),所以"仅仅"打印JSON或将其移动到数组或类似选项不是最后一步.

"Price"字段正常工作,但问题出在使用逗号的字段上. 我找不到绕过它的方法,也找不到类似的问题.

会很想了解如何处理这个问题.

谢谢!

推荐答案

您可以将Sum个JSON对象解组为GO映射,并将映射中的值赋给 struct 字段.这一限制仅适用于 struct 标记(它们不能包含逗号等任意字符),但映射可以包含任何键.

例如:

type Sum struct {
    Change string
    Price  string
    Value  string
}

func (s *Sum) UnmarshalJSON(data []byte) error {
    var m map[string]string
    if err := json.Unmarshal(data, &m); err != nil {
        return err
    }

    s.Change = m["Change, %"]
    s.Price = m["Price"]
    s.Value = m["Value, $"]
    return nil
}

type model struct {
    Date string `json:"date"`
    Sum  Sum    `json:"Sum"`
}

func main() {
    var m model
    if err := json.Unmarshal([]byte(src), &m); err != nil {
        panic(err)
    }
    fmt.Printf("%+v\n", m)
}

const src = `{
  "date": "2022-09-09 00:00:00 UTC",
  "Sum": {
    "Change, %": "0.10",
    "Price": "254",
    "Value, $": "455.26"
  }
}`

这将输出(在Go Playground上试用):

{Date:2022-09-09 00:00:00 UTC Sum:{Change:0.10 Price:254 Value:455.26}}

Json相关问答推荐

使用SQL查询从SON中查找第n个密钥对值

JOLT拉平数组

如何获取brew list作为JSON输出

PowerShell脚本-替换json数组(转义$var将被视为不带双引号的文本)

使用单元和非单元版本反序列化Rust中的枚举,而无需编写自定义反序列化程序

如何在VegaLite中应用Times New Roman,CaliBiri字体

由于无效的UTF-8开始字节0xa0,JSON被拒绝,但编码似乎有效

给定一个包含两个数组的JSON输入文件,如何使用Jolt将一个数组中的每个元素与另一个数组组合在一起?

如何将响应数据保存到Flutter 中的共享首选项中

将PostgreSQL转换为JSON对象

颠簸转换问题

JOLT JSON 将值从一对多转换为一对一

转义 Haskell 记录的字段

JOLT 在 struct 体中间添加一个 JSON 字段

SwiftUI:如何使用 0 索引数组键为 JSON 添加类型

Angularjs访问本地json文件

python,将Json写入文件

Android JSON 库的性能和可用性比较

使用 C# 调用 json

类型是接口或抽象类,不能实例化