【问题标题】:Unmarshaling string to struct like structure in Golang在 Golang 中将字符串解组为类似结构的结构
【发布时间】:2021-08-29 00:49:27
【问题描述】:

Golang 给了我一个字符串:

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

我知道它不是 JSON 字符串。 有没有办法“解组”字符串并获取每辆车的模型? 我怎样才能得到每辆车的型号? 还是首先是一个错误的问题?我很欣赏你的意见。

【问题讨论】:

  • 只是为了确定,确切的输入字符串是什么,你从哪里得到的?如果输入是一些有效的 JSON,则使用 json.Unmarshall

标签: json go struct unmarshalling


【解决方案1】:

要解组您的输入并检索每辆车的型号,您必须使用 umashal 方法,然后使用 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

【讨论】:

    【解决方案2】:

    您可能很幸运使用 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

    【讨论】:

    • 这个变量呢?我应该使用哪个包来解组? var carBrand = ["DEU":{"name":"Volkswagen", "sales":329}, "JPN":{"name":"Toyota", "sales":311}, "KOR":{"name":"Hyundai","sales":223}] 我怎么知道使用哪个包来解组特定格式?
    猜你喜欢
    • 2021-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-14
    • 1970-01-01
    • 2022-12-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多