在 Go 中将 JSON 文件读取为对象
在 Go 中,尝试读取 JSON 文件并将其解析为对象时可能会遇到困难JSON 对象。
失败的尝试
将 JSON 文件读取为对象的一些失败尝试包括:
plan, _ := ioutil.ReadFile(filename) // filename is the JSON file to read var data interface{} err := json.Unmarshal(plan, data)
这会导致错误“json: Unmarshal(nil)”。
generatePlan, _ := json.MarshalIndent(plan, "", " ") // plan is a pointer to a struct
这会产生一个字符串输出,但将其转换为字符串会使其无法作为 JSON 对象循环。
解决方案
解决这个问题的关键在于json.Unmarshal指向的值。它必须是一个指针。
plan, _ := ioutil.ReadFile(filename) var data interface{} err := json.Unmarshal(plan, &data)
类型断言
在 unmarshal 中使用空接口时,需要使用类型断言来获取底层值,就像原生 Go 一样类型:
bool, for JSON booleans float64, for JSON numbers string, for JSON strings []interface{}, for JSON arrays map[string]interface{}, for JSON objects nil for JSON null
最佳实践
强烈建议使用具体结构通过 Unmarshal 填充 JSON 数据。这提供了更好的清晰度并避免了类型断言的需要。
以上是如何在 Go 中将 JSON 文件读取为对象?的详细内容。更多信息请关注PHP中文网其他相关文章!