shell post json遇到的问题

一、背景

shell脚本中读取文件,换行输出,然后把数据传递给后端处理

二、解决过程

请看代码:

file=`cat ./test.txt`

    for line in $file
    do
        echo $line
    done  > ./test2.txt

    a=`cat ./test2.txt`


curl -H "Content-Type: application/json" -X POST -d '{"param":"'"$a"'"}' "http url path"

:引用变量的引用"'"$a"'",否则少打个单引号或者双引号可能会导致后端拿不到数据

功能:读取text.txt文件,按列输出到text2.txt文件,然后把该数据以post json的形式传递给后端做处理。

但是脚本执行后会报以下错误:

Caused by: com.fasterxml.jackson.databind.JsonMappingException: Illegal unquoted character ((CTRL-CHAR, code 10)): has to be escaped using backslash to be included in string value
 at [Source: (org.springframework.util.StreamUtils$NonClosingInputStream); line: 1, column: 1215] (through reference chain: com.techwolf.dac.push.admin.param.BossHiParam["param"])
	at com.fasterxml.jackson.databind.JsonMappingException.wrapWithPath(JsonMappingException.java:390)
	at com.fasterxml.jackson.databind.JsonMappingException.wrapWithPath(JsonMappingException.java:349)
	at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.wrapAndThrow(BeanDeserializerBase.java:1822)
	at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:404)
	at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:195)
	at com.fasterxml.jackson.databind.deser.DefaultDeserializationContext.readRootValue(DefaultDeserializationContext.java:322)
	at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4593)
	at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3601)
	at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:380)
	... 58 common frames omitted

报错原因:字符串中包含换行符“\n”

解决办法:去掉"\n",以",“代替,在后端逻辑处理中把”,“替换成”\n",
例如代码中的echo -n $line,是不换行加英文逗号输出,a=${a%*,}是去掉整个字符串中最后一个英文逗号,curl -H "Content-Type: application/json" -X POST -d '{"param":"'"$a"'"}' "http url path"是以post json的形式调http接口

 file=`cat ./test.txt`

    for line in $file
    do
        echo -n $line,
    done  > ./test2.txt

    a=`cat ./test2.txt`

  
   a=${a%*,}


curl -H "Content-Type: application/json" -X POST -d '{"param":"'"$a"'"}' "http url path"

是否还有其他的解决方法
比如在shell脚本中直接将换行字符转义,但是目前笔者没有找到解决方案,如果感兴趣的童鞋可以在评论区留言!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值