我可以将 json 对象作为 go 中的 cli 标志的值传递吗?

我正在为我的 go 程序使用urfave/cli,我想要一个 cli 标志来读取这样一个 json 值:

{"name":"foo","surname":"var"}

我目前正在将该变量读取为 a cli.StringFlag,它返回 a string。然后,我打算json.Unmarshall这样做,但它不起作用。问题是stringcli库返回的是这样的:

[{name foo} {surname var}]

这不再是 json 了。

有没有办法做到这一点?请注意,如果它返回一个简单的地图,那也可以


尚方宝剑之说
浏览 88回答 2
2回答

倚天杖

对于 Linux,尝试使用 shell escape 传递参数#!/bin/bash echo "{\"name\":\"foo\",\"surname\":\"var\"}"在 go 程序中,只需编组此字符串参数

HUX布斯

问题是 shell (bash, ksh, csh, zsh, ...) 解释{"name":"foo","surname":"var"}作为一系列裸词和引用词标记:代币类型价值裸词{引用的词name裸词:引用的词foo裸词,引用的词surname裸词:引用的词var裸词}碰巧,逗号 ( ,) 是一个 shell operator,用于算术,并且基本上被丢弃(至少在 zsh 中,我使用的是)。然后将整体拼接在一起得到name:foo surname:var您可以通过打开 shell 并执行命令来查看实际效果echo {"name":"foo","surname":"var"}但是,如果您用单引号 ( ') 引用您的 JSON 文档:echo '{"name":"foo","surname":"var"}'你会得到你所期望的:{"name":"foo","surname":"var"}但是请注意,如果您的 JSON 文档中的文本包含文字撇号/单引号 ( ', U+0027),这将失败,因此您希望将 JSON 文档中的所有此类事件替换为 以\,转义它们。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go