为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
尚方宝剑之说 2023-02-28 20:27:25
我正在为我的 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 程序中,只需编组此字符串参数


查看完整回答
反对 回复 2023-02-28
?
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 文档中的所有此类事件替换为 以\,转义它们。


查看完整回答
反对 回复 2023-02-28
  • 2 回答
  • 0 关注
  • 87 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信