在 Golang 中将字符串解组为类似结构的结构

Unmarshaling string to struct like structure in Golang

我在下面用 Golang 得到了一个字符串:

var cars = [
    {
       model: "SLR",
       brand: "Mercedes",
       prices: [520, 730],
    },
    {
       model: "M4",
       brand: "BMW",
       prices: [420, 820],
    }
]

我知道这不是 JSON 字符串。 有什么办法可以“解组”字符串并获取每辆车的型号吗? 我怎样才能得到每辆车的型号? 或者这首先是一个错误的问题?我很欣赏你的意见。

您可能有幸使用 yaml 作为输入:

package main

import (
    "fmt"
    "gopkg.in/yaml.v2"
)

func main() {
    const cars = `[ { model: "SLR", brand: "Mercedes", prices: [520, 730], }, { model: "M4", brand: "BMW", prices: [420, 820], } ]`

    type Car struct {
        Model  string `yaml:"model"`
        Brand  string `yaml:"brand"`
        Prices []int  `yaml:"prices"`
    }

    var carsArr []Car
    if err := yaml.Unmarshal([]byte(cars), &carsArr); err != nil {
        panic(err)
    }

    fmt.Printf("Cars: %+v", carsArr)
    // Cars: [{Model:SLR Brand:Mercedes Prices:[520 730]} {Model:M4 Brand:BMW Prices:[420 820]}]

}

在这里试试:https://play.golang.org/p/hRQXSes1tGi

要解组您的输入并检索每辆车的型号,您必须使用 umarshal 方法,然后使用 range 方法,我已按如下方式重现您的场景:

package main

import (
    "fmt"

    "gopkg.in/yaml.v2"
)

type Car struct {
    Model  string `yaml:"model"`
    Brand  string `yaml:"brand"`
    Prices []int  `yaml:"prices"`
}

func main() {
    var car = []byte(`[ { model: "SLR", brand: "Mercedes", prices: [520, 730], }, { model: "M4", brand: "BMW", prices: [420, 820], } ]`)

    var cars []Car
    if err := yaml.Unmarshal(car, &cars); err != nil {
        panic(err)
    }

    for _, v := range cars {
        fmt.Println(v.Model)

    }

} 

输出:

SLR
M4