加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Golang:json.Unmarshal没有正确返回数据

发布时间:2020-12-16 09:28:44 所属栏目:大数据 来源:网络整理
导读:我有一个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,R
我有一个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
}

你可以看到我在结束前有2行

fmt.Println(t)

我不知道为什么打印

{  0 0  {0   0} []}

我希望它能以一种有用的方式返回我的themeInfo,这样我就可以用它来进一步处理.我在这里做错了什么?

解决方法

您的JSON无效. JavaScript允许单引号; JSON does not.此外,对象键必须双引号:

Valid:

{ "name": "Simon" }

Invalid:

{ name: "Simon" }
{ 'name': "Simon" }
{ "name": 'Simon' }

如果用双引号包装JSON键和值,您将看到预期的输出:

{snow background.jpg 600 400 20,40 {12 #ff00ff verdana 20} [{abc.jpg 2 4 0} {def.png 4 22 10}]}

例如,

const sampleTheme       = `{
    "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
        }
    ]
}`

有关完整计划,请参阅:http://play.golang.org/p/SLhaLbJcla

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读