java - 解析错误 - Java 去除作为命令行参数发送的 JSON 字符串中的引号 (")
问题描述
我有一个批处理文件,它将 JSON 写入temp.txt
文件并将此字符串作为命令行参数传递给 Java 应用程序。
批处理脚本:
java -jar "path/to/jar/MyJar.jar" > temp.txt
SET /p _json=<temp.txt
java -jar "path/to/jar/MyOtherJar.jar" %_json%
PAUSE
MyJar.jar
输出 JSON 并将其写入 并将JSONtemp.txt
作为MyOtherJar
参数。
JSON 看起来像这样:
{
"Key1": "5d078",
"Key2": "5d079",
"list2": ["abc", "def"],
"list1": ["xyz", "aaa"],
"Size": 2
}
Java 应用程序尝试将接收到的字符串转换为JSONObject
如下形式:
String jsonString = args[0];
try {
JSONObject jsonObject = new JSONObject(jsonString);
} catch (Exception e) {
e.printStackTrace();
}
但是当我执行批处理脚本时,我收到了这个错误:
org.json.JSONException: Expected a ',' or ']' at 78 [character 79 line 1]
at org.json.JSONTokener.syntaxError(JSONTokener.java:433)
at org.json.JSONArray.<init>(JSONArray.java:127)
at org.json.JSONTokener.nextValue(JSONTokener.java:366)
at org.json.JSONObject.<init>(JSONObject.java:214)
at org.json.JSONObject.<init>(JSONObject.java:321)
at de.iese.MainClass.main(MainClass.java:17)
打印后,jsonString
它显示整个字符串在没有双引号的情况下被解析,即,
{
Key1: 5d078,
Key2: 5d079,
list2: [abc, def],
list1: [xyz, aaa],
Size: 2
}
有人可以解释为什么会这样吗?我对 cmd 脚本不是很熟悉,但是有没有办法绕过这种写入 txt 文件并直接存储这是一个变量并将其发送到MyOtherJar
?
解决方案
考虑到您的输入文件test.txt包含:
{
"Key1": "5d078",
"Key2": "5d079",
"list2": ["abc", "def"],
"list1": ["xyz", "aaa"],
"Size": 2
}
此 WIN 批处理脚本代码逐行读取输入文件,并附加到以下示例中名为data的变量。调用 Java 类/或可执行库时,将输入数据用双引号括起来,因为您的程序只读取一个参数(空格将跨越输入而不带双引号进入多个参数)。下面的例子只是运行一个独立的类来测试它,并使用“org.json”库依赖。
@echo off
set data=
for /f "tokens=*" %%a in (test.txt) do (
call set "data=%%data%% %%a"
)
set CLASSPATH=.;json-20180813.jar
java test.JsonObjectConversion "%data%"
pause
现在阅读程序将如下所示:
//single argument beaing read by Java
String json = args[0];
try {
JSONObject jsonObject = new JSONObject(json);
//object be read properly now
System.out.println(jsonObject);
} catch (Exception e) {
//no exception should come here
}
推荐阅读
- typescript - 如何在 TypeScript 枚举中使用属性键 (object.key)?
- r - 替换R中一个单元格上的日期值
- ruby-on-rails - 导致遗留问题的路线轨道 5,不能破坏等
- php - 如何在 Laravel 8.x 的视图中检索 cookie 值?
- python - 停止语句执行直到为真
- python - 如何从接口外部访问变量
- r - R 版本 4.0.5 的 R 类型强制错误
- build - 我正在尝试为我使用 expo cli 设计的 react native 项目构建独立的应用程序。但是构建在中途停止并显示以下错误
- javascript - 在 Firebase 身份验证弹出窗口中更改颜色
- windows - git提示输入用户名和密码