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\"
	}
}

json字符串作为java程序启动参数遇到的问题_第1张图片
结果是发现没问题的

解决方案

既然知道了加上转义符后可以正常运行,那么我只需要修改一下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

json字符串作为java程序启动参数遇到的问题_第2张图片
此时$param可以作为main方法的入参配置,程序正常运行

你可能感兴趣的:(java,java,json,开发语言)