如何在golang中将json文件作为json对象读取

我在本地机器上存储了一个JSON文件。我需要在一个变量中读取它,并循环通过它来获取JSON对象值。如果我在使用ioutil.Readfile方法读取文件后使用Marshal命令,它会给出一些数字作为输出。这是我几次失败的尝试

尝试1:

plan,:=ioutil.ReadFile(filename)//filename是要读取的JSON文件
变量数据接口{}
err:=json.Unmarshal(计划、数据)
如果出错!=零{
Error(“无法解组json”,err)
}
fmt.Println(数据)

它给了我以下的错误

time=“2016-12-13T22:13:05-08:00”level=error msg=“无法解组json:unmarshal(nil)”
<零>

尝试2:我尝试将JSON值存储在结构中,然后使用MarshalIndent

generatePlan,:=json.marshallindent(plan,“,”)//plan是指向结构的指针
fmt.Println(字符串(生成计划))

它将输出作为字符串。但如果我将输出转换为字符串,那么我将无法将其作为JSON对象进行循环

如何在golang中将JSON文件作为JSON对象读取?有可能吗?
感谢您的帮助。提前谢谢

answer=“41136623”的数据

要由json.Unmarshal填充的值必须是指针

来自GoDoc:

Unmarshal解析JSON编码的数据,并将结果存储在v指向的值中

因此,您需要执行以下操作:

计划,Util:=ioutil.ReadFile(文件名)
变量数据接口{}
err:=json.Unmarshal(计划和数据)

您的错误(Unmarshal(nil))表示读取文件时出现问题,请检查ioutil.ReadFile


另外请注意,当在解组中使用空接口时,您需要使用类型断言以go原语类型获取基础值

要将JSON解组为接口值,解组存储
在接口值中包含以下内容:

bool,用于JSON布尔值
float64,用于JSON数字
字符串,用于JSON字符串
[]接口{},用于JSON数组
映射[string]接口{},用于JSON对象
nil表示JSON null

使用具体的结构来使用Unmarshal填充json总是一种更好的方法

发表评论