处理来自 Web 服务器的 JSON 响应时存在一些不便。
比如我事先不知道JSON的数据结构(也不想对其建模),只想从中获取值!
所以,对于 Python,我可以只写
value = response["body"][4]["data"]["uid"] //response is a dictionary
但是对于 Golang,我需要为每个元素做断言!
value := response["body"].([]interface{})[4].(map[string]interface{})["data"].(map[string]interface{})["uid"]
//response is a map[string]interface{}
这是我用golang写的,得到我需要的值。你对此有何建议?对于这种情况有什么有用的提示吗?
最佳答案
如果您使用结构对 JSON 对象建模并解码为该结构的值,那么您不需要那些丑陋的索引和类型断言,您可以简单地引用结构字段。
请注意,您不必害怕响应很复杂,您只需要对您打算使用的部分进行建模即可。例如。如果响应是一个包含一百个字段的对象,但您只需要 2 个,则创建一个仅包含这 2 个字段的结构。
如果您不想为您的 JSON 对象建模(或者不能因为它是动态的),那么您可以编写一个通用的实用函数,该函数根据路径(一系列映射键和 slice 索引),你可以在这个答案中看到:Taking a JSON string, unmarshaling it into a map[string]interface{}, editing, and marshaling it into a []byte seems more complicated then it should be
最后,您可以使用已经包含此辅助功能的第三方库,例如 https://github.com/icza/dyno (披露:我是作者)。
使用 github.com/icza/dyno
,它看起来像这样:
value, err := dyno.Get(response, "body", 4, "data", "uid")
关于json - 有什么方便的方法可以在没有类型断言的情况下获取 JSON 元素吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48377503/