首页 > 其他分享 >如何将bash变量传递给JSON

如何将bash变量传递给JSON

时间:2023-05-11 22:24:41浏览次数:37  
标签:变量 private JSON curl true bash name

我正在尝试编写示例脚本,在其中生成诸如" student-101 ... student-160"之类的名称。 我需要发布JSON数据,当我这样做时,出现JSON解析错误。

这是我的脚本:

1
2
3
4
5
6
7
8
9
name="student-10"

for i in {1..1}
do
    r_name=$name$i
    echo $r_name
    curl -i -H 'Authorization: token <token>' -d '{"name": $r_name,"private": true}'"<URL>">> create_repos_1.txt
    echo created $r_name
done

 

 

我总是收到"Problems parsing JSON"错误。 我已经尝试过各种引号的组合,等等,但是似乎没有任何效果!

我究竟做错了什么?

 相关讨论  

 

  • 附带说明一下,如果您曾经以这种方式(从数据库,Web表单)开始推送实名,请避免使用。
  • 使用1值序列{1..1}有什么意义?
  • @RuudHelderman那是个好建议! 牢记在心
  • @RomanPerekhrest哦,此刻只推一推。 以后再增加到60!

 

 


另一个选择是使用printf创建数据字符串:

1
2
printf -v data '{"name":"%s","private": true}'"$r_name"
curl -i -H 'Authorization: token <token>' -d"$data""$url">> create_repos_1.txt

首先,您的name属性是一个字符串,因此您需要在json中为其添加双引号。

 

 

其次,使用单引号,bash不会进行变量扩展:它不会用变量内容替换$r_name(有关更多信息,请参见bash shell脚本中命令中单引号内变量的扩展)。

总之,使用:

1 -d '{"name":"'"$r_name"'","private": true}'
 相关讨论  

 

  • 现在,您已经用$r_name取消了引号,因此在shell对其进行扩展时,将对其进行分词和路径名扩展。 您要-d {"name":""$r_name"","private": true}
  • 这对我有用。 但是,我无法理解引号之间的区别:(

 

 


别; 使用jq(或类似名称)使用变量输入来构建正确引用的JSON。

1
2
3
4
5
6
7
8
9
name="student-10"

for i in {1..1}
do
    r_name=$name$i
    jq -n --arg r_name"$r_name" '{name: $r_name, private: true}' |
      curl -i -H 'Authorization: token <token>' -d @-"<URL>">> create_repos_1.txt
    echo created $r_name
done

@-自变量告诉curl从标准输入(通过jq的管道)读取数据以用于-d。

 

 

类似于"{\\"name\\": \\"$r_name\\", \\"private\\": true}"的方法可能会起作用,但是它很丑陋,并且如果r_name包含需要在结果JSON中加引号的任何字符(例如双引号或ASCII控制字符),也会失败。

标签:变量,private,JSON,curl,true,bash,name
From: https://www.cnblogs.com/cheyunhua/p/17392415.html

相关文章

  • json在前端的使用
    调用接口后一般传递的都是json格式的数据,这个json格式的数据吗可能会有多层嵌套,如何获取这个最内层的嵌套value值便是关键。而数据解析放在前端便更加的简单,可以像数组一样使用但是需要解决以下问题:1.数据在后端的时候已经是json格式的object,如何异步发送这个json数据到前端(最新......
  • inputstream转json
    inputstream是一个Java中的输入流,它允许从源读取数据。如果要将inputstream转换为JSON,需要使用相应的解析器,例如GSON或Jackson。以下是使用GSON的示例代码:InputStreaminputStream=...;Gsongson=newGson();JsonReaderreader=newJsonReader(newInputStreamReader(in......
  • python基础——变量&字符串
    int()整数float()浮点数#变量名只包含字母,数字,下划线1、变量名能以字母或下划线开始,但是不能一数字开始2、变量名不能包含空格,但是能是用下划线来分割3、每个变量都执指向一个值4、python中关键字和函数名不可以用作变量名,关键字和函数名是python中用于特殊用途的单子#字符......
  • cJson学习(二)
    已剪辑自:https://blog.csdn.net/ZRXSLYG/article/details/122541036?spm=1001.2101.3001.6650.17&utm_medium=distribute.pc_relevant.none-task-blog-2~default~BlogCommendFromBaidu~Rate-17-122541036-blog-123806149.235^v35^pc_relevant_default_base&depth_1-utm_......
  • 基于kibana点点点点获取到 要懂得聚合查询json
    1.点击Visualize2.创建Table的visualization3.选择查询的索引4.勾选查询条件appName为delta-mainsysName为jdl-deltaappDeployPlatform为JDOS3_CN5.选择先按照resourceType进行第一层groupBy条件按照resourceType进行groupBy条件会出来如图所示,按照resourceType进......
  • Android 开发 利用 jq 在 Makefile 里给 output-metadata.json 增加字段
    Makefile:.PHONY:uploadupload:metadata #./push-apk.sh.PHONY:metadatametadata:app/build/outputs/apk/release/output-metadata.jsonapp/build/outputs/apk/release/output-metadata.json:buildupdate-content.txt #在Makefile中插入shell脚本要用双美元......
  • java代码中fastjson生成字符串和解析字符串的方法和javascript文件中字符串和json数组
    1.java代码中fastjson生成字符串和解析字符串的方法List<TemplateFull>templateFulls=newArrayList<TemplateFull>();JSONArrayjsonArr=newJSONArray();jsonArr.addAll(templateFulls);StringjsonStr=jsonArr.toJSONString();System.out.pr......
  • 无法加载文件或程序集“ Newtonsoft.Json”或其依赖项之一清单定义与程序集引用不匹配
    无法加载文件或程序集“Newtonsoft.Json”或其依赖项之一清单定义与程序集引用不匹配的解决方法当一个程序中引用了不同版本的 Newtonsoft.Json.dll,又无法更改时候,可能会报此类错误,那么解决的方法如下:1、把不同的版本的dll放在bin目录下的ref文件夹2、在app.config或者web.......
  • jmeter 美化json响应
    简介在查看结果树中,ResponseBody里的json一般是不换行的,看起来很不方便。这里通过JSR223后置处理器改变响应的格式具体实现首先,我们要把fastjson的jar包放入到jmeterHome/lib/目录(建议放入1.x的版本,因为fastjson2可能需要多个jar包,具体需要哪些我也没有测试),重启jmeter第二步......
  • 前台json给后台传送两种数据一个json,一个字符串
    前台json数据以什么格式传给后台,后台controller可以已两个参数接收,比如一个list,一个string。有两种方法:第一种方法:contentType:'application/x-www-form-urlencoded',相当于向后台传送了俩参数,一个是数组,一个是string字符串;但是后台接收的时候不能用@RequestBody也不能用@PathVa......