在 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 字符串的中间