当前位置: 首页 > 知识库问答 >
问题:

处理两种形式的 JSON?

皇甫飞跃
2023-03-14

我正在Go中编写一个应用程序,它将接收两种形式的JSON:

例1:

{"book_data":{"title":"book-title","page_number":457}}

示例2:

{"book_data":{"collection":214},"books":{"data":[{"title":"book-title","page_number":457},{"title":"book-title","page_number":354}]}}

我想我可以创建一个如下所示的结构,并将JSON解组到其中:

type Book struct {
    Title      string `json:"title"`
    PageNumber int    `json:"page_number"`
}

但这只适用于第一个例子。

如何处理两个示例中的 JSON?

共有3个答案

桓智敏
2023-03-14

您可以散集映射,因为您的键是字符串,而值可能类似于-map[string]接口{}。如果您不确定任何数据类型或值,请使用接口{},因为它可以存储任何值。然后使用结果查看它是哪种形式,并反序列化为特定的结构类型。

将JSON转换成go struct的另一种方法是使用这个工具。https://mholt.github.io/json-to-go/

周飞
2023-03-14

为什么不散集到map[string]接口{},然后使用结果查看您需要处理的表单?然后您可以为每个表单使用特定的结构类型进行反序列化。

另一种方法是使用下面的包来检查不同的属性,这样您就可以决定使用哪个结构来进行真正的解组。

https://github.com/go-xmlpath/xmlpath/tree/v2

况经纬
2023-03-14

您可以首先部分散集在json.RawMessage中,然后根据未编组的有效负载来决定。您也可以只散集在更通用的结构中。类似

type Book struct {
    Title      string `json:"title"`
    PageNumber int    `json:"page_number"`
}
type BookShelf struct {
    BookData struct {
        Book
        Collection int `json:"collection"`
    } `json:"book_data"`
    Books struct {
        Data []Book `json:"data"`
    } `json:"books"`
}

对我来说,它看起来可读性强,有意义,并且便于进一步处理。

 类似资料:
  • 本文向大家介绍处理兼容问题有两种方式:相关面试题,主要包含被问及处理兼容问题有两种方式:时的应答技巧和注意事项,需要的朋友参考一下 1)IE6/IE7/IE8支持通过document方法产生的标签,利用这一特性让这些浏览器支持HTML5新标签。 2)使用是html5shim框架 另外,DOCTYPE声明的方式是区分HTML和HTML5标志的一个重要因素,此外,还可以根据新增的结构,功能元素来加以区

  • 5.1 两种注册形式 Faygo注册路由的写法有两种形式,根据个人喜好可自行选择。 假设我们需要注册到路由器的Handler如下: // 新建应用服务,参数:名称、版本 var app = faygo.New("myapp", "1.0") func Count(prefix string) faygo.HandlerFunc { var count uint64 return f

  • 问题内容: 我在表单中有两个 提交 按钮。我如何确定哪一个被击中服务器端? 问题答案: 如果给每个人起一个名字,那么被点击的人将作为其他任何输入被发送出去。

  • 本文向大家介绍Android实现圆形图片的两种方式,包括了Android实现圆形图片的两种方式的使用技巧和注意事项,需要的朋友参考一下 在项目中,我们经常会用到圆形图片,但是android本身又没有提供,那我只能我们自己来完成。 第一种方式,自定义CircleImageView: 使用的时候,切记不要引用成V4报下的CircleImageView!! 另一篇文章分享的第二种方式:把图片修剪为圆形,

  • 问题内容: 我有一个模板页面,需要两种形式。如果我仅使用一种形式,则可以像下面的典型示例一样正常: 但是,如果我想使用多个表单,我如何让视图知道我仅提交一种表单,而不提交另一种表单(即,它仍然是request.POST,但我只想处理提交表单的表单)发生了吗? 这是该解决方案基于这样的答案expectedphrase和bannedphrase是的提交按钮的不同形式和名称expectedphrasef

  • 本文向大家介绍oracle-apex 处理表格形式,包括了oracle-apex 处理表格形式的使用技巧和注意事项,需要的朋友参考一下 示例 发布表格形式时,每个记录中的项目可通过“ APEX_APPLICATION.G_Fnn”数组供PL / SQL代码使用。G_F01对应于第一个可编辑列,G_F02对应于第二个列,依此类推。例如,您可以遍历每条记录并按如下方式访问每个字段的过帐值: 如果第一列