gpt4 book ai didi

java - 解析错误 - Java 去掉作为命令行参数发送的 JSON 字符串中的引号 (")

转载 作者:太空宇宙 更新时间:2023-11-04 09:34:51 25 4
gpt4 key购买 nike

我有一个批处理文件,它将 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 并将其写入 temp.txtMyOtherJar 将 JSON 作为参数。

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
}

关于java - 解析错误 - Java 去掉作为命令行参数发送的 JSON 字符串中的引号 ("),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56633049/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com