我有一个提供JSON响应的curl命令。我想在java&中使用这个curl命令解析java中的JSON响应。有可能吗?
编辑: 当我执行以下操作时: public static void main(String [] args)抛出Throwable {
try {
InputStream stream = Runtime.getRuntime().exec("curl --globoff --insecure --silent -u username:password -X GET -H 'Content-Type: application/json' \"http://ficcjira.xyz.com/rest/api/2/search?jql=project=ABC&fields=Timetracking\"").getInputStream();
BufferedReader input = new BufferedReader(new InputStreamReader(stream), 1);
input.readLine();
input.read();
input.read();
DataReader reader = new JsonReader(input)
.addField("TimeSpent", "//array/object/timespent")
.addRecordBreak("//array/object");
/*reader = new TransformingReader(reader)
.add(new BasicFieldTransformer("TimeSpent").stringToDouble());*/
DataWriter writer = new StreamWriter(System.out);
JobTemplate.DEFAULT.transfer(reader, writer);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
我收到以下错误:Cannot run program "curl": CreateProcess error=2, The system cannot find the file specified
答案 0 :(得分:0)
你可以这样做,并使用一些json解析器读取流,例如Gson:
try (
Reader reader = new InputStreamReader(
Runtime.getRuntime().exec("curl -h").getInputStream()
)
) {
JsonElement element = new JsonParser().parse(reader);
}
答案 1 :(得分:0)
这是访问Jira Rest api的可怕方式。由于它是REST API,因此您可以通过多种方式调用它。其中一些是:
我在这里有一些示例代码:https://github.com/somaiah/jrjc
Jersey:使用Jersey调用REST API并阅读响应。
如果您使用的是Spring,则可以使用RestTemplate。我在这里有一个小样本:https://github.com/somaiah/restTemplate
当然,你有很多选择 - Restlet,Apache commons等等。
只有在从bash脚本调用时才应使用curl选项。在这种情况下,您可以使用jq(我喜欢)https://stedolan.github.io/jq/
来解析响应答案 2 :(得分:0)
Runtime rt = Runtime.getRuntime();
Process p1;
Process p2;
try {
String postSubmissionJSon = "{"data":"value"}";
String[] stringPost = {"curl", "-X", "POST", "https://your-url.com/api/posts",
"--cert", "test.crt.pem",
"--key", "test.key.pem",
"-H", "accept: application/json",
"-H", "content-type: application/json",
"-d", postSubmissionJSon};
ProcessBuilder ps = new ProcessBuilder(stringPost);
//ps.redirectErrorStream(true);
Process pr = ps.start();
pr.waitFor();
BufferedReader reader2 = new BufferedReader(new InputStreamReader(pr.getInputStream()));
String line2 = "";
while ((line2 = reader2.readLine()) != null) {
output.append(line2 + "\n");
}
System.out.println("\n\n\noutput====" + output + "===\n\n\n");
String sbToString = output.toString();
jSONObject = new JSONObject(sbToString);
System.out.println(jSONObject.toString());
p1 = Runtime.getRuntime().exec("pwd");
p1.waitFor();
BufferedReader reader1a
= new BufferedReader(new InputStreamReader(p1.getInputStream()));
String line1a = "";
while ((line1a = reader1a.readLine()) != null) {
output.append(line1a + "\n");
System.out.println("output====" + output + "===");
}
} catch (Exception e) {
System.out.println("===============ERROR===============\n" + e.getMessage() + "\n\n\n");
}
/ *注意:您的密钥(test.key.pem)和Cert(test.crt.pem)应位于正确的目录中。对于玻璃鱼,它在"〜/ glassfish4 / glassfish / domains / domain1 / config"或者您可以通过更改" - cert"," test.crt.pem"来指定确切的位置。 - > " /home/user/files/test.crt.pem" ;.与钥匙相同。 * /
答案 3 :(得分:0)
根据您提到的错误进行回答。 您需要安装cUrl并确保将其添加到PATH变量中。
要检查,您可以尝试从Windows命令提示符下执行curl命令。如果看不到有效的响应,则可能没有cUrl,也没有出现在PATH变量中。
要安装,请在https://curl.haxx.se/download.html上找到它们,然后解压缩。 然后将它们添加到PATH变量中,然后尝试再次运行cUrl命令。