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

在Go中解析JSON时如何指定默认值

程树
2023-03-14
问题内容

我想解析Go中的JSON对象,但想为未指定的字段指定默认值。例如,我具有struct类型:

type Test struct {
    A string
    B string
    C string
}

A,B和C的默认值分别是“ a”,“ b”和“ c”。这意味着当我解析json时:

{"A": "1", "C": 3}

我想得到的结构:

Test{A: "1", B: "b", C: "3"}

使用内置包可以encoding/json吗?否则,是否有任何具有此功能的Go库?


问题答案:

使用encoding / json可以实现:调用时json.Unmarshal,不需要给它一个空结构,可以给它一个默认值。

例如:

var example []byte = []byte(`{"A": "1", "C": "3"}`)

out := Test{
    A: "default a",
    B: "default b",
    // default for C will be "", the empty value for a string
}
err := json.Unmarshal(example, &out) // <--
if err != nil {
    panic(err)
}
fmt.Printf("%+v", out)

在Go操场上运行此示例将返回{A:1 B:default b C:3}

如您所见,json.Unmarshal(example, &out)将JSON解组为out,覆盖JSON中指定的值,但其他字段保持不变。



 类似资料:
  • 我想在Swagger-PHP中为POST请求指定默认的JSON正文。我的注释如下所示: 如您所见,我正试图使用<code>default={}实现默认值,但Swagger UI忽略此值,并将‘string’作为默认值: 如何将“字符串”部分更改为默认的JSON对象?

  • 我正在尝试编写一个泛型方法来返回一个< code>ZonedDateTime,给定日期为< code>String及其格式。 如果日期中没有指定默认的,我们如何使使用默认的? 可以使用,但我想使用Java8时间API。 这个问题使用的是固定时区。我将格式指定为参数。日期及其格式都是< code>String参数。更一般。 代码和输出如下: 输出

  • 问题内容: 我正在Go中处理一个json POST,其中包含一个包含64位整数的对象数组。当使用json.Unmarshal时,这些值似乎被转换为float64,并不是很有用。 有什么办法可以在json.Unmarshal的输出中保留原始的int64? 转到上面代码的游乐场 问题答案: 解决方案1 您可以使用Decoder和UseNumber解码您的号码而不会丢失: 该类型的定义如下: 这意味着您

  • 问题内容: 以下问题有多种答案/技术: 如何为golang结构设置默认值? 如何在Golang中初始化结构 我有几个答案,但需要进一步讨论。 问题答案: 强制方法获取结构(构造方法)。 一个好的设计是使您的类型不导出,但提供一个类似NewMyType()的导出构造函数,您可以在其中正确初始化struct / type。还返回接口类型而不是具体类型,并且该接口应包含其他人希望对您的值进行的操作。当然

  • 以下问题有多种答案/技巧: 如何为golang结构设置默认值? 如何在 golang 中初始化结构 我有几个答案,但需要进一步讨论。

  • 问题内容: 我们有事务日志文件,其中每个事务都是JSON格式的一行。我们经常需要获取数据的选定部分,执行一次时间转换,然后以特定格式将结果馈送到另一个系统中。我编写了一个Python脚本,可以根据需要执行此操作,但是我希望Go可以更快,并且可以给我一个开始学习Go的机会。因此,我写了以下内容: 编译时没有任何抱怨,但是令我惊讶的是缺乏性能改进。为了进行测试,我将2,000,000行日志放入tmpf