gpt4 book ai didi

json - 使用 go-jsonnet 返回纯 JSON

转载 作者:IT王子 更新时间:2023-10-29 01:40:57 26 4
gpt4 key购买 nike

我正在使用 Google 的 go-jsonnet评估一些 jsonnet 文件的库。

我有一个函数,就像这样,它呈现一个 Jsonnet 文档:

// Takes a list of jsonnet files and imports each one and mixes them with "+"
func renderJsonnet(files []string, param string, prune bool) string {

// empty slice
jsonnetPaths := files[:0]

// range through the files
for _, s := range files {
jsonnetPaths = append(jsonnetPaths, fmt.Sprintf("(import '%s')", s))
}

// Create a JSonnet VM
vm := jsonnet.MakeVM()

// Join the slices into a jsonnet compat string
jsonnetImport := strings.Join(jsonnetPaths, "+")

if param != "" {
jsonnetImport = "(" + jsonnetImport + ")" + param
}

if prune {
// wrap in std.prune, to remove nulls, empty arrays and hashes
jsonnetImport = "std.prune(" + jsonnetImport + ")"
}

// render the jsonnet
out, err := vm.EvaluateSnippet("file", jsonnetImport)

if err != nil {
log.Panic("Error evaluating jsonnet snippet: ", err)
}

return out

}

此函数当前返回一个字符串,因为 jsonnet EvaluateSnippet 函数返回一个字符串。

我现在要做的是使用 go-prettyjson 呈现结果 JSON图书馆。但是,因为我传入的 JSON 是一个字符串,所以它无法正确呈现。

那么,一些问题:

  • 我能否将返回的 JSON 字符串转换为 JSON 类型,而无需事先知道将其编码为何种结构
  • 如果不是,我可以用其他方式以漂亮的方式呈现 json 吗?
  • 这里是否缺少一个选项、函数或方法来使这更容易?

最佳答案

Can I convert the returned JSON string to a JSON type, without knowing beforehand what struct to marshal it into

是的。这很容易:

var jsonOut interface{}
err := json.Unmarshal([]byte(out), &jsonOut)
if err != nil {
log.Panic("Invalid json returned by jsonnet: ", err)
}
formatted, err := prettyjson.Marshal([]byte(jsonOut))
if err != nil {
log.Panic("Failed to format jsonnet output: ", err)
}

更多信息在这里:https://blog.golang.org/json-and-go#TOC_5 .

Is there an option, function or method I'm missing here to make this easier?

是的。 go-prettyjson 库有一个 Format 函数,可以为您进行解码:

formatted, err := prettyjson.Format([]byte(out))
if err != nil {
log.Panic("Failed to format jsonnet output: ", err)
}

can I render the json in a pretty manner some other way?

取决于你对漂亮的定义。 Jsonnet 通常在单独的行上输出对象的每个字段和每个数组元素。这通常被认为是 pretty-print (而不是将所有内容都放在同一行上并使用最少的空白以节省几个字节)。我想这对你来说还不够好。您可以在 jsonnet 中编写您自己的 list ,根据您的喜好对其进行格式化(请参阅 std.manifestJson 作为示例)。

关于json - 使用 go-jsonnet 返回纯 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51091711/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com