如何在java中使用curl并解析json响应

vsnjm48y  于 2022-10-30  发布在  Java
关注(0)|答案(4)|浏览(387)

我有一个curl命令,它给出一个JSON响应。我想在java中使用这个curl命令,并在java中解析JSON响应。可以这样做吗?
使用下面的Java代码:

public static void main(String[] args) throws 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
qlfbtfca

qlfbtfca1#

这是一种很糟糕的访问Jira Rest API的方式。因为它是一个REST API,你可以用很多方式调用它。其中一些是:
1.适用于Java的Rest Java客户端. https://marketplace.atlassian.com/plugins/com.atlassian.jira.jira-rest-java-client/server/overview
我这里有一些示例代码:https://github.com/somaiah/jrjc

  1. Jersey:使用Jersey调用REST API并读取响应。
    1.如果你使用的是Spring,你可以使用RestTemplate。我这里有一个小的示例:https://github.com/somaiah/restTemplate
    当然,有一个完整的选择为您- Restlet,Apache公用资源等。
    只有在从bash脚本调用curl选项时,才应该使用curl选项。
wrrgggsh

wrrgggsh2#

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)和证书(test.crt.pem)应该位于正确的目录中。对于glassfish,它位于“~/glassfish 4/glassfish/domains/domain 1/config”中,或者您可以通过更改“--cert”、“test.crt.pem”--〉“/home/user/files/test.crt.pem”来指定确切的位置。与密钥相同。*/

doinxwow

doinxwow3#

将根据您提到的错误进行回答。您需要安装cUrl并确保它已添加到PATH变量中。
若要检查,您可以尝试从Windows命令提示字符执行curl命令。如果您无法看到有效的回应,可能是因为您没有cUrl,或是PATH变数中没有cUrl。
要安装,请在https://curl.haxx.se/download.html上找到它们并解压缩。然后将它们添加到PATH变量中,并尝试再次运行cUrl命令。

xoefb8l8

xoefb8l84#

您可以使用一些json解析器来读取流,例如Gson:

try (
    Reader reader = new InputStreamReader(
        Runtime.getRuntime().exec("curl -h").getInputStream()
    )
) {
    JsonElement element = new JsonParser().parse(reader);
}

相关问题