为什么JSON解析不会因传递给Decode()的类型完全不同而失败?

帕特里克:

我有以下要从API解析的数据结构:

type OrderBook struct {
    Pair       string           `json:"pair"`
    UpdateTime int64            `json:"update_time"`
}

type depthResponse struct {
    Result OrderBook `json:"result"`
    // doesn't matter here
    //Cmd    string              `json:"-"`
}

当我解析以下内容时:

data := `{"error":{"code":"3016","msg":"交易对错误"},"cmd":"depth"}`

它不会失败。为什么?

完整的源代码(游乐场

package main

import (
    "encoding/json"
    "fmt"
    "log"
    "strings"
)

type OrderBook struct {
    Pair       string           `json:"pair"`
    UpdateTime int64            `json:"update_time"`
}

type depthResponse struct {
    Result OrderBook `json:"result"`
}

func main() {
    data := `{"error":{"code":"3016","msg":"交易对错误"},"cmd":"depth"}`
    r := strings.NewReader(data)

    var resp depthResponse
    if err := json.NewDecoder(r).Decode(&resp); err != nil {
        log.Fatalf("We should end up here: %v", err)
    }

    fmt.Printf("%+v\n", resp)
}
优生:

这是预期的行为Decode(如Unmarshal函数中所述):

https://golang.org/pkg/encoding/json/#Unmarshal

默认情况下,没有相应结构字段的对象键将被忽略。

但是DisallowUnknownFields(),如果输入JSON的目标结构中未包含字段,则可以使用该函数(也如文档中所述)使其失败。

dec := json.NewDecoder(r)
dec.DisallowUnknownFields()

在这种情况下,您将得到预期的错误。

此处修改过的游乐场:https : //play.golang.org/p/A0f6dxTXV34

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Java

为什么接口类型被认为与重载完全不同?

来自分类Dev

为什么GCC认为template参数是int而它是完全不同的类型?

来自分类Dev

Python:为什么将不同类型的参数传递给类型定义的函数不会引起任何错误?

来自分类Dev

为什么dotnet运行与VS Code调试完全不同

来自分类Dev

为什么余数运算符会因不同的数据类型而失败?

来自分类Dev

当问题本质上完全不同时,为什么要使用C2259?

来自分类Dev

为什么 PIL 和 matplotlib 在这里创建完全不同的图像?

来自分类Dev

为什么最后连接的字符串与代码所做的完全不同?

来自分类Dev

为什么gcc和clang会为成员函数模板参数生成完全不同的代码?

来自分类Dev

为什么Hibernate的缓存统计信息与EhCache的统计信息完全不同

来自分类Dev

shutil.copy2 给出“SameFileError”尽管文件完全不同 - 为什么?

来自分类Dev

为什么CHECKSUM_AGG()对于完全不同的输入值返回相同的值?

来自分类Dev

为什么属于同一工作的任务的持续时间在Spark Streaming中是完全不同的?

来自分类Dev

为什么在左联接中使用子查询会给出与等效表完全不同的答案?

来自分类Dev

为什么在线测试的正则表达式在C ++中表现完全不同?

来自分类Dev

为什么 max-width 和 width 显示完全不同的结果?

来自分类Dev

从一个控制器的角度将表单传递给完全不同的控制器

来自分类Dev

传递给函数的结构指针完全不变

来自分类Dev

从函数返回完全不同的数据类型

来自分类Dev

将值直接传递给sizeof运算符时,为什么数据类型的大小不同?

来自分类Dev

如果它们都是引用类型,为什么将字符串传递给方法的行为与 List<object> 不同?

来自分类Dev

为什么分类器的 score 函数返回的结果与 sklearn 中的 cross_val_score 函数完全不同?

来自分类Dev

为什么两台笔记本电脑在同一WLAN上显示完全不同的Internet速度?

来自分类Dev

(菜鸟问题)为什么在 .py 和 .html 文件中检查用户是否是博客文章的作者完全不同?

来自分类Dev

为什么将取消引用的指针传递给指针类型?

来自分类Java

为什么公共API内部泄漏类型的汇编不会失败?

来自分类Java

为什么这种通用类型转换不会失败?

来自分类Dev

为什么“宽度=设备宽度”完全不起作用?

来自分类Dev

为什么这个div对jQuery完全不可见?

Related 相关文章

  1. 1

    为什么接口类型被认为与重载完全不同?

  2. 2

    为什么GCC认为template参数是int而它是完全不同的类型?

  3. 3

    Python:为什么将不同类型的参数传递给类型定义的函数不会引起任何错误?

  4. 4

    为什么dotnet运行与VS Code调试完全不同

  5. 5

    为什么余数运算符会因不同的数据类型而失败?

  6. 6

    当问题本质上完全不同时,为什么要使用C2259?

  7. 7

    为什么 PIL 和 matplotlib 在这里创建完全不同的图像?

  8. 8

    为什么最后连接的字符串与代码所做的完全不同?

  9. 9

    为什么gcc和clang会为成员函数模板参数生成完全不同的代码?

  10. 10

    为什么Hibernate的缓存统计信息与EhCache的统计信息完全不同

  11. 11

    shutil.copy2 给出“SameFileError”尽管文件完全不同 - 为什么?

  12. 12

    为什么CHECKSUM_AGG()对于完全不同的输入值返回相同的值?

  13. 13

    为什么属于同一工作的任务的持续时间在Spark Streaming中是完全不同的?

  14. 14

    为什么在左联接中使用子查询会给出与等效表完全不同的答案?

  15. 15

    为什么在线测试的正则表达式在C ++中表现完全不同?

  16. 16

    为什么 max-width 和 width 显示完全不同的结果?

  17. 17

    从一个控制器的角度将表单传递给完全不同的控制器

  18. 18

    传递给函数的结构指针完全不变

  19. 19

    从函数返回完全不同的数据类型

  20. 20

    将值直接传递给sizeof运算符时,为什么数据类型的大小不同?

  21. 21

    如果它们都是引用类型,为什么将字符串传递给方法的行为与 List<object> 不同?

  22. 22

    为什么分类器的 score 函数返回的结果与 sklearn 中的 cross_val_score 函数完全不同?

  23. 23

    为什么两台笔记本电脑在同一WLAN上显示完全不同的Internet速度?

  24. 24

    (菜鸟问题)为什么在 .py 和 .html 文件中检查用户是否是博客文章的作者完全不同?

  25. 25

    为什么将取消引用的指针传递给指针类型?

  26. 26

    为什么公共API内部泄漏类型的汇编不会失败?

  27. 27

    为什么这种通用类型转换不会失败?

  28. 28

    为什么“宽度=设备宽度”完全不起作用?

  29. 29

    为什么这个div对jQuery完全不可见?

热门标签

归档