我正在为我的 go 程序使用urfave/cli,我想要一个 cli 标志来读取这样一个 json 值:{"name":"foo","surname":"var"}我目前正在将该变量读取为 a cli.StringFlag,它返回 a string。然后,我打算json.Unmarshall这样做,但它不起作用。问题是stringcli库返回的是这样的:[{name foo} {surname var}]这不再是 json 了。有没有办法做到这一点?请注意,如果它返回一个简单的地图,那也可以
2 回答
倚天杖
TA贡献1828条经验 获得超3个赞
对于 Linux,尝试使用 shell escape 传递参数
#!/bin/bash echo "{\"name\":\"foo\",\"surname\":\"var\"}"
在 go 程序中,只需编组此字符串参数
HUX布斯
TA贡献1876条经验 获得超6个赞
问题是 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 文档中的所有此类事件替换为 以\,
转义它们。
- 2 回答
- 0 关注
- 87 浏览
添加回答
举报
0/150
提交
取消