我们如何在 golang 中将 json 文件读取为 json 对象
How can we read a json file as json object in golang
我有一个 JSON 文件存储在本地机器上。我需要在变量中读取它并循环遍历它以获取 JSON 对象值。如果我在使用 ioutil.Readfile 方法读取文件后使用 Marshal 命令,它会给出一些数字作为输出。这是我几次失败的尝试,
尝试 1:
plan, _ := ioutil.ReadFile(filename) // filename is the JSON file to read
var data interface{}
err := json.Unmarshal(plan, data)
if err != nil {
log.Error("Cannot unmarshal the json ", err)
}
fmt.Println(data)
它给了我以下错误,
time="2016-12-13T22:13:05-08:00" level=error msg="Cannot unmarshal the json json: Unmarshal(nil)"
<nil>
尝试 2:我尝试将 JSON 值存储在结构中,然后使用 MarshalIndent
generatePlan, _ := json.MarshalIndent(plan, "", " ") // plan is a pointer to a struct
fmt.Println(string(generatePlan))
它给我输出字符串。但是,如果我将输出转换为字符串,那么我将无法将其作为 JSON 对象循环。
我们如何在 golang 中将 JSON 文件读取为 JSON 对象?有可能这样做吗?
任何帮助表示赞赏。提前致谢!
json.Unmarshal
填充的值需要是一个指针。
来自 GoDoc :
Unmarshal parses the JSON-encoded data and stores the result in the value pointed to by v.
因此您需要执行以下操作:
plan, _ := ioutil.ReadFile(filename)
var data interface{}
err := json.Unmarshal(plan, &data)
你的错误 (Unmarshal(nil)) 表示读取文件时出现问题,请检查 ioutil.ReadFile
返回的错误
另请注意,在解组中使用空接口时,您需要使用 type assertion 来获取基本类型的基础值。
To unmarshal JSON into an interface value, Unmarshal stores one of
these in the interface value:
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
使用具体结构填充您的 json 使用 Unmarshal
.
总是更好的方法
我有一个 JSON 文件存储在本地机器上。我需要在变量中读取它并循环遍历它以获取 JSON 对象值。如果我在使用 ioutil.Readfile 方法读取文件后使用 Marshal 命令,它会给出一些数字作为输出。这是我几次失败的尝试,
尝试 1:
plan, _ := ioutil.ReadFile(filename) // filename is the JSON file to read
var data interface{}
err := json.Unmarshal(plan, data)
if err != nil {
log.Error("Cannot unmarshal the json ", err)
}
fmt.Println(data)
它给了我以下错误,
time="2016-12-13T22:13:05-08:00" level=error msg="Cannot unmarshal the json json: Unmarshal(nil)"
<nil>
尝试 2:我尝试将 JSON 值存储在结构中,然后使用 MarshalIndent
generatePlan, _ := json.MarshalIndent(plan, "", " ") // plan is a pointer to a struct
fmt.Println(string(generatePlan))
它给我输出字符串。但是,如果我将输出转换为字符串,那么我将无法将其作为 JSON 对象循环。
我们如何在 golang 中将 JSON 文件读取为 JSON 对象?有可能这样做吗? 任何帮助表示赞赏。提前致谢!
json.Unmarshal
填充的值需要是一个指针。
来自 GoDoc :
Unmarshal parses the JSON-encoded data and stores the result in the value pointed to by v.
因此您需要执行以下操作:
plan, _ := ioutil.ReadFile(filename)
var data interface{}
err := json.Unmarshal(plan, &data)
你的错误 (Unmarshal(nil)) 表示读取文件时出现问题,请检查 ioutil.ReadFile
另请注意,在解组中使用空接口时,您需要使用 type assertion 来获取基本类型的基础值。
To unmarshal JSON into an interface value, Unmarshal stores one of these in the interface value:
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
使用具体结构填充您的 json 使用 Unmarshal
.