window java 调用python脚本传递json字符串json.loads()格式化异常问题
项目场景:window java 调用python脚本传递json字符串json.loads()格式化异常问题。问题描述:json:{"name": "ccc","pwd": "cc","age": 12}java:String info = "{\"name\":\"ccc\",\"pwd\":\"cc\",\"age\":12}";String arguments = "python" + "
·
项目场景:
window java 调用python脚本传递json字符串json.loads()格式化异常问题。
问题描述:
json:
{
"name": "ccc",
"pwd": "cc",
"age": 12
}
java:
String info = "{\"name\":\"ccc\",\"pwd\":\"cc\",\"age\":12}";
String arguments = "python" + " " + "E:\\myPython\\src\\python\\test2.py" + " " + info;
try {
Process process = Runtime.getRuntime().exec(arguments);
BufferedReader in = new BufferedReader(new InputStreamReader(process.getInputStream(), "UTF-8"));
String line = null;
while ((line = in.readLine()) != null) {
System.out.println(line);
}
in.close();
int re = process.waitFor();
System.out.println(re);
} catch (Exception e) {
e.printStackTrace();
}
python:
if __name__ == '__main__':
info = sys.argv[1]
try:
print(json.loads(info) )
except Exception as e:
print(e)
result:
Expecting property name enclosed in double quotes: line 1 column 2 (char 1)
原因分析:
windows环境中在传递参数的时候, 引号没有被作为参数的一部分传递给脚本,在脚本中接收到的参数是:
{name:ccc,pwd:cc,age:12}
解决方案:
对入参json中的引号进行转义, 使其成为字符串的一部分:
{\"name\":\"ccc\",\"pwd\":\"cc\",\"age\":12}
即在代码中这样:
String info = "{\\\"name\\\":\\\"ccc\\\",\\\"pwd\\\":\\\"cc\\\",\\\"age\\\":12}";
在脚本中接收到的为:
{"name":"ccc","pwd":"cc","age":12}
总的来说在win环境中使用Java调用python比较麻烦!
更多推荐
所有评论(0)