json字符串作为java程序启动参数遇到的问题

问题描述

最近开发一个jar,配置信息没有使用配置文件来修改,想着直接通过json启动程序会更加方便,程序写好了,在调试shell脚本时,发现json解析一直有问题
报错信息如下:

Exception in thread "main" com.alibaba.fastjson.JSONException: syntax error, pos 9, line 1, column 10{a:{aa1:a1,aa2:a2},b:{bb1:b1,bb2:b2}}
	at com.alibaba.fastjson.parser.DefaultJSONParser.parse(DefaultJSONParser.java:1510)
	at com.alibaba.fastjson.parser.DefaultJSONParser.parse(DefaultJSONParser.java:1390)
	at com.alibaba.fastjson.parser.DefaultJSONParser.parseObject(DefaultJSONParser.java:616)
	at com.alibaba.fastjson.parser.DefaultJSONParser.parseObject(DefaultJSONParser.java:581)
	at com.alibaba.fastjson.parser.DefaultJSONParser.parse(DefaultJSONParser.java:1430)
	at com.alibaba.fastjson.parser.DefaultJSONParser.parse(DefaultJSONParser.java:1390)
	at com.alibaba.fastjson.JSON.parse(JSON.java:181)
	at com.alibaba.fastjson.JSON.parse(JSON.java:191)
	at com.alibaba.fastjson.JSON.parse(JSON.java:147)
	at com.alibaba.fastjson.JSON.parseObject(JSON.java:252)

json 文件格式如下:

{
	"a": {
		"aa1": "a1",
		"aa2": "a2"
	},
	"b": {
		"bb1": "b1",
		"bb2": "b2"
	}
}

问题排查

通过打印String[] args,打印的字符串下:

{
	a:{
		aa1:a1,
		aa2:a2
	},
	b:{
		bb1:b1,
		bb2:b2
	}
}

比对输入和输出的数据可以发现,通过main进来的参数,"被舍弃
如果加上\转义符是否能解决这个问题?

{
	\"a\": {
		\"aa1\": \"a1\",
		\"aa2\": \"a2\"
	},
	\"b\": {
		\"bb1\": \"b1\",
		\"bb2\": \"b2\"
	}
}

在这里插入图片描述
结果是发现没问题的

解决方案

既然知道了加上转义符后可以正常运行,那么我只需要修改一下shell脚本,将"替换为\"j即可

这里直接给出命令:

# 定义一个json模板
jsontmp='{"a":{"aa1":"a1","aa2":"a2"},"b":{"bb1":"b1","bb2":"b2"}}'
# 将 " 替换为 \" ,并且在json的头部和尾部添加 "
param=`echo $jsontmp | sed  's/"/\\\"/g' |sed 's/^/"/g' | sed 's/$/"/g'`
# 打印 json模板
echo $param

在这里插入图片描述
此时$param可以作为main方法的入参配置,程序正常运行

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值