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

带有任意键的json的golang结构

龚俊捷
2023-03-14
问题内容

我正在尝试编写一个可以处理json响应的结构类型

{"items":
[{"name": "thing",
  "image_urls": {
    "50x100": [{
      "url": "http://site.com/images/1/50x100.jpg",
      "width": 50,
      "height": 100
    }, {
      "url": "http://site.com/images/2/50x100.jpg",
      "width": 50,
      "height": 100
    }],
    "200x300": [{
      "url": "http://site.com/images/1/200x300.jpg",
      "width": 200,
      "height": 300
    }],
    "400x520": [{
      "url": "http://site.com/images/1/400x520.jpg",
      "width": 400,
      "height": 520
    }]
  }
}

由于键每次都不相同…不同的响应可能包含或多或少的键,不同的键,如您所见,使用50x100返回特定大小的多个图像,我如何创建与此匹配的结构?

我可以这样:

type ImageURL struct {
    Url string
    Width, Height int
}

用于单个项目,以及用于特定键的列表。但是包含的结构看起来如何?

就像是:

type Images struct {
    50x100 []ImageURL
    ...
}
type Items struct {
    name string
    Image_Urls []Images
}

可能有效,但我无法列举所有可能的图像尺寸响应。另外,Image_Urls末尾没有真正的列表。我希望能够将其直接转储到json.Unmarshal中(如果可能)。


问题答案:

您的json看起来更像是我的地图。

type Items map[string][]ImageUrl

应该做你想做的。



 类似资料:
  • 我正在尝试编写一个能够处理json响应的结构类型,就像这样 由于每次键都不一样…不同的响应可能有或多或少的键,不同的键,正如您可以看到的50x100返回特定大小的多个图像,我如何创建与此匹配的结构? 我可以像这样做: 以及针对特定键的它们的列表。但包含结构的外观如何? 类似于: 可能有效,但我无法列举所有可能的图像大小响应。最后的Image_Urls并不是一个真正的列表。我希望能够将它直接转储到j

  • 发现了许多类似的问题(标题),但没有一个解决了我的问题,所以这里是它。 我有一个JSON字符串,其中包含一些已知字段(应该始终存在)以及任意数量的未知/任意字段。 在此示例中,和是已知的字段。和是任意/未知的字段。 未知字段可以具有任何名称(键)和任何值。值类型可以是字符串、布尔值、float64 或 int。 我想要的是找到最简单、最优雅(惯用)的方法来解析这样的消息。 我使用了以下结构: 使用

  • 问题内容: 我正在研究一些代码来解析来自HTTP响应的JSON数据。我的代码看起来像这样: 变量中的json 如下所示: 但是,不是零。当我打印出来时,上面写着。是什么原因造成的?JSON似乎有效。此错误与我的自定义结构有关吗? 提前致谢! 问题答案: 所述的结果是一个语法错误在JSON输入(可能丢失,或)。该错误不取决于您解码到的值的类型。 我在操场上使用示例JSON输入运行了代码。它运行没有错

  • 问题内容: 我在网上看到的每个示例都显示了构建数据结构的示例,然后将JSON编组为数据类型。问题是我得到的是JSON的大量转储,使用这种方法似乎很费力。 有没有办法采取大量数据转储并将其解编为类似于对象的地图,其功能类似于json / maps? 我现在所拥有的就是这样… 但是我不能这样称呼它 问题答案: 总的来说,这是一个 坏 主意!但是,如果您确实需要,可以这样做: ..那么您可以使用任何类似

  • 我有一个函数: 其中参数通常是: 其中键,可以是任何值,但值总是(必须是)类型其中,都是函数。 如何使用JSDoc在我的工厂函数中为事件参数记录这个结构? 我能想到的唯一解决方案是制作一个数组,然后我可以像这样使用typedef: 但是我真的想保留原来的结构。 是否可以在我的原始结构中记录此类型定义? 我主要关心的是它在VSCode中的工作,VSCode将这些类型定义从JSDoc中提升出来。

  • 问题内容: 简而言之:无论地图的类型如何,如何按已排序的键顺序遍历地图? 我发现了一些相关的问题,最接近的问题表明,如果不依靠模块,就不可能做到这一点。这种理解正确吗? 考虑下面的Go代码,该代码以其键的排序顺序遍历两个不同类型的映射: 对于两种不同的地图类型,提取键然后对其进行排序的逻辑是重复的。 有什么方法可以排除这种逻辑并避免重复吗? 我在尝试编写提供方法的接口时遇到了麻烦。特别是,of的返