构建对象的 Json 对象并将其写入文件

我正在尝试获取从 Go API 接收到的字符串数组,并将它们以奇怪的 json 列表格式写入文件。没有括号 [],所以我必须为数组中的每个字符串值创建一个“维度”。我正在尝试使用类型/结构来做到这一点,但我一直卡住(Go 的新功能)。我应该尝试只使用地图,还是有办法做到这一点?


这是我现在使用的代码:


package main


import (

    "fmt"

    "io/ioutil"

)


type Dimension struct {

    SQL, Type string

}


type Measure struct {

    Type         string

    DrillMembers []string

}


func check(e error) {

    if e != nil {

        panic(e)

    }

}


func main() {

    a := []string{"country", "year", "gdpPercap", "lifeExp", "pop", "continent"}

    cubeSchema := "measures: {\n  count: {\n    type: `count`,\n    drillMembers: "

    for i, s := range a {

        cubeSchema += s

        fmt.Println(cubeSchema)

        fmt.Println(i)

    }


    fileText := []byte(cubeSchema)

    fmt.Println(cubeSchema)

    err := ioutil.WriteFile("test.js", fileText, 0644)

    check(err)

}

这就是我需要输出的样子:


measures: {

    count: {

      type: `count`,

      drillMembers: [country]

    }

  },


  dimensions: {

    country: {

      sql: `country`,

      type: `string`

    },


    year: {

      sql: `year`,

      type: `string`

    },


    gdppercap: {

      sql: `gdppercap`,

      type: `string`

    },


    lifeexp: {

      sql: `lifeexp`,

      type: `string`

    },


    pop: {

      sql: `pop`,

      type: `string`

    },


    continent: {

      sql: `continent`,

      type: `string`

    }

  }

现在我一直被以下输出卡住:


measures: {

  count: {

    type: `count`,

    drillMembers: countryyeargdpPercaplifeExppopcontinent


智慧大石
浏览 138回答 2
2回答

慕尼黑5688855

package mainimport (    "fmt"    "io/ioutil")func check(e error) {    if e != nil {        panic(e)    }}func main() {    schema := `measures: {    count: {      type: 'count',      drillMembers: [country]    }  },  dimensions: {  `    a := []string{"country", "year", "gdpPercap", "lifeExp", "pop", "continent"}    var cubeSchema string    for _, s := range a {        cubeSchema += s + ": {\n\tsql: " + s + ",\n\ttype: `string`\n},\n"    }    fileText := []byte(schema + cubeSchema + "}\n}")    fmt.Println(cubeSchema)    err := ioutil.WriteFile("test.js", fileText, 0644)    check(err)}检查此代码。

翻翻过去那场雪

我试着做第二部分:package mainimport (    "encoding/json"    "fmt")func main() {    a := []string{"country", "year", "gdpPercap", "lifeExp", "pop", "continent"}    var items map[string]sqlType    items = make(map[string]sqlType)    for _, v := range a {        items[v] = sqlType{SQL: v, Type: "string"}    }    dimensions := dimensions{Dimensions: items}    bytes, err := json.Marshal(dimensions)    if err != nil {        panic(err)    }    c := string(bytes)    fmt.Println(c)}type sqlType struct {    SQL  string `json:"sql"`    Type string `json:"type"`}type dimensions struct {    Dimensions map[string]sqlType `json:"dimensions"`}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go