一直在谷歌上搜索并寻找解决方案,但没有成功。我正在将一个 JSON 文件导入到一个结构中,但是,当我想使用它时,值会以随机顺序出现。这是我的 JSON 文件的示例:"Assets": { "asset1": "asset1.png", "asset2": "asset2.png" }, "Colors": { "MainColor": [ { "red": 247, "green": 0, "blue": 247 } ], "MainGradient": [ { "red": 9, "green": 103, "blue": 170 }, { "red": 18, "green": 138, "blue": 221 } ]}我可以使用 Unmarshal 导入 JSON,但是,当我打印它时,“红色、绿色、蓝色”值以随机顺序输出,如下所示:[{map[asset1:asset1.png asset2:asset2.png] {[map[red:247 green:0 blue:247]] [map[green:103 red:9 blue:170] map[green:138 blue:221 red:18]]}}]如您所见,RGB 值每次都以随机顺序出现。我想知道是否有办法始终以相同的顺序输出:红色、绿色、蓝色。谢谢你。
2 回答
慕的地8271018
TA贡献1796条经验 获得超4个赞
地图是无序的,无论是在 Go 中还是按照 JSON 规范。您必须根据需要按顺序调用它们。
r, g, b := color["red"], color["green"], color["blue"]
您还可以将值解组到结构中,这将为您提供确定性布局:
type Color struct {
Red int `json:"red"`
Green int `json:"green"`
Blue int `json:"blue"`
}
http://play.golang.org/p/0l01NxJ4dq
慕无忌1623718
TA贡献1744条经验 获得超4个赞
虽然我个人会采用上面 JimB 描述的路线,但另一种选择只是改变您显示数据的方式。我可以根据您的输出推断出您所做的;fmt.Printf("%v", YourInstance)
. 如果您使用格式字符串明确指定每个项目的位置,则地图中项目的顺序无关紧要;
fmt.Printf("red: %v, green: %v, blue: %v\n", ColorInstance["red"], ColorInstance["green"], ColorInstance["blue"])
现在只打印一个实例,因此要打印整个内容,您需要进一步的逻辑,但这是基本思想。
如果您希望事情井然有序,那么地图不是适合您的结构。如果您想基于密钥快速访问,那么地图是一个不错的选择。如果您只想格式化输出以写入控制台或文件或其他任何内容,可以使用地图轻松完成,但我个人认为,JimB 的建议是进行反序列化和处理此类数据的最佳方法。我的理念是使结构尽可能具体。您可以先完成工作,然后获得更清晰、更简洁、性能更好的代码。
- 2 回答
- 0 关注
- 178 浏览
添加回答
举报
0/150
提交
取消