登录
首页 >  Golang >  Go问答

我能用 go 中的 cli 标志值来传递一个 json 对象吗?

来源:stackoverflow

时间:2024-02-09 12:54:22 466浏览 收藏

Golang不知道大家是否熟悉?今天我将给大家介绍《我能用 go 中的 cli 标志值来传递一个 json 对象吗?》,这篇文章主要会讲到等等知识点,如果你在看完本篇文章后,有更好的建议或者发现哪里有问题,希望大家都能积极评论指出,谢谢!希望我们能一起加油进步!

问题内容

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

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

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

[{name foo} {surname var}]

这不再是 json 了。

有办法实现这一点吗?请注意,如果它返回一个简单的地图,那也可以工作


正确答案


对于linux,尝试使用shell转义传递参数

#!/bin/bash

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

在go程序中,只需编组这个字符串参数

问题在于shell(bash、ksh、csh、zsh...)解释

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

作为裸词引用词标记的序列:

Token Type Value
bareword {
quoted word name
bareword :
quoted word foo
bareword ,
quoted word surname
bareword :
quoted word var
bare word }

事实上,逗号 (,) 是一个 shell 运算符,用于算术,并且基本上被丢弃(至少在我使用的 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 文档中出现的所有此类情况替换为\, 来逃避它们。

今天关于《我能用 go 中的 cli 标志值来传递一个 json 对象吗?》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>