我无法解密从.json
文件中读取的json数据
type redisConfig struct {
host string
password string
}
func loadRedisConfig() (redisConfig, error){
b, _ := ioutil.ReadFile("config.json")
var config redisConfig
fmt.Println(b)
fmt.Println(string(b))
e := json.Unmarshal(b, &config)
fmt.Println(e)
fmt.Println(config)
return config, nil;
}
文件config.json
包含:
{
"host": "example.com",
"password": "password"
}
我已使用http://jsonlint.com/验证它是有效的JSON。在这里阅读其他类似的问题我发现问题是无效的json,我不认为这是这种情况。
以下是运行代码段的输出:
[123 13 10 32 32 34 104 111 115 116 34 58 32 34 101 120 97 109 112 108 101 46 99 111 109 34 44 13 10 32 32 34 112 97 115 115 119 111 114 100 34 58 32 34 112 97 115 115 119 111 114 100 34 13 10 125]
{
"host": "example.com",
"password": "password"
}
<nil>
{ }
config
变量包含一个空结构,应该用文件和解码器提供的封送json填充
答案 0 :(得分:2)
Unmarshal只会设置结构的导出字段 只需将字段设为公共(导出):
type redisConfig struct {
Host string
Password string
}
使用ioutil.ReadFile("config.json")
:
package main
import (
"encoding/json"
"fmt"
"io/ioutil"
)
func main() {
b, err := ioutil.ReadFile("config.json")
if err != nil {
panic(err)
}
var config redisConfig
err = json.Unmarshal(b, &config)
if err != nil {
panic(err)
}
fmt.Println(config)
}
type redisConfig struct {
Host string
Password string
}
输出:
{example.com password123}
package main
import (
"encoding/json"
"fmt"
)
func main() {
//The file config.json contains this:
str := `{
"host": "example.com",
"password": "password123"
}`
//b, _ := ioutil.ReadFile("config.json")
b := []byte(str)
var config redisConfig
e := json.Unmarshal(b, &config)
if e != nil {
panic(e)
}
fmt.Println(config)
}
type redisConfig struct {
Host string
Password string
}
输出:
{example.com password123}