Golang是否具有类似python的ast.literal_eval()的功能,用于将地图的字符串表示形式转换为实际的地图对象?

时间:2019-10-28 02:14:43

标签: go

我需要在Go中将地图对象的字符串表示形式转换为实际的地图对象。 Python通过ast.literal_eval()并在Go中寻找类似的东西来提供此功能。

我已经检查了Go的ast lib https://golang.org/pkg/go/ast,但找不到相似的功能。也是第三方lib https://github.com/apaxa-go/eval,它通过自述文件中的示例代码“出现”以支持此操作(尽管并非特定于地图):

src:="int8(1*(1+2))"
expr,err:=ParseString(src,"")
if err!=nil{
    return err
}
r,err:=expr.EvalToInterface(nil)
if err!=nil{
    return err
}
fmt.Printf("%v %T", r, r)   // "3 int8"

但是在尝试地图时:

myMap := "map[blah:1 stuff:2 list:3]"
expr, err := eval.ParseString(myMap, "")
if err != nil{
    log.Fatal("%v", err)
}
log.Printf("%v %T", expr, expr)
result, err := expr.EvalToInterface(nil)
if err != nil{
    log.Fatal("%v", err)
}
log.Printf("%v %T", result, result)

我收到以下错误消息:

2019/10/27 18:38:27.242352 main.go:33: %vexpression:1:9: expected ']', found ':'

第33行是表达式:

expr, err := eval.ParseString(myMap, "")

我刚开始使用Go,所以我可能会从错误的方向进行操作。任何帮助,将不胜感激。最终目标是采用地图的这种字符串表示形式并将其转换为JSON。

1 个答案:

答案 0 :(得分:0)

myMap中的地图表示错误。你应该这样写

map[string]int{"foo": 1, "bar": 2}