我正在為我的 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 關注
- 111 瀏覽
添加回答
舉報
0/150
提交
取消