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

Posted

技术标签:

【中文标题】在 Golang 中将字符串解组为类似结构的结构【英文标题】:Unmarshaling string to struct like structure in 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 【参考方案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] 我怎么知道使用哪个包来解组特定格式?

以上是关于在 Golang 中将字符串解组为类似结构的结构的主要内容,如果未能解决你的问题,请参考以下文章

将 json 数组解组为 go struct(数组在 JSON 字符串的中间

关于将 yaml 解组为结构的错误

部分 JSON 在 Go 中解组为地图

如何在 Akka HTTP 中将“text/plain”解组为 JSON

无法将字符串解组为 int64 类型的 Go 值

在 Android 中将 XML 文件解组为 Java 对象?