- 此问题在此处已有答案**:
json.Marshal(struct) returns "{}"(3个答案)
JSON and dealing with unexported fields(2个答案)
(un)marshalling json golang not working(3个答案)
Parsing JSON in Golang doesn't Populate Object [duplicate](1个答案)
Printing Empty Json as a result [duplicate](1个答案)
2天前关闭。
我有一个json文件(themes/snow/theme.json)
{
Name:'snow',
Bgimage:'background.jpg',
Width:600,
Height:400,
Itemrotation:'20,40',
Text:{
Fontsize:12,
Color:'#ff00ff',
Fontfamily:'verdana',
Bottommargin:20
},
Decoration:[
{
Path:'abc.jpg',
X:2,
Y:4,
Rotation:0
},
{
Path:'def.png',
X:4,
Y:22,
Rotation:10
}
]
}
我有一个解析json数据的文件
package main
import (
"fmt"
"os"
"encoding/json"
"io/ioutil"
"log"
)
const themeDirectory = "themes"
const themeJsonFile = "theme.json"
type TextInfo struct {
Fontsize int
Color string
Fontfamily string
Bottommargin int
}
type DecoInfo struct {
Path string
X int
Y int
Rotation int
}
type ThemeInfo struct {
Name string
Bgimage string
Width int
Height int
Itemrotation string
Text textInfo
Decoration []decoInfo
}
func main() {
var tinfo = parseTheme("snow")
//use tinfo to build graphics
}
func parseTheme(themename string) themeInfo {
abspath, _ := os.Getwd()
filename := abspath + "/" + themeDirectory + "/" + themename + "/" + themeJsonFile
//Check this file exists
if _, error := os.Stat(filename); error != nil {
if os.IsNotExist(error) {
log.Fatal(filename + " does not exist")
os.Exit(1)
}
}
filebyte, error := ioutil.ReadFile(filename)
if error != nil {
log.Fatal("Could not read file " + filename + " to parse")
os.Exit(1)
}
var t themeInfo
json.Unmarshal(filebyte, &t)
fmt.Println(t)
return t
}
你可以看到我在结尾前有两行
fmt.Println(t)
我不知道为什么打印
{ 0 0 {0 0} []}
我希望它能以一种可用的方式返回主题信息,这样我就可以用它来做进一步的处理。
2条答案
按热度按时间anhgbhbe1#
因为json包使用反射来剖析你的结构体,所以它只能看到导出的字段。你所有的字段名都是以小写字母开始的,所以它们不会被导出。把名称改为以大写字母开头,我想它会开始为你工作。
0x6upsns2#
**JSON无效。**JavaScript允许使用单引号; JSON does not。此外,对象键必须用双引号引起来:
如果用双引号将JSON键和值括起来,就会看到预期的输出:
例如,
有关完整程序,请参见:http://play.golang.org/p/SLhaLbJcla