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

时间:2016-06-15 14:22:37

标签: java json parsing curl

我有一个提供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

4 个答案:

答案 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,因此您可以通过多种方式调用它。其中一些是:

  1. Rest Java Client for Java。 https://marketplace.atlassian.com/plugins/com.atlassian.jira.jira-rest-java-client/server/overview
  2. 我在这里有一些示例代码:https://github.com/somaiah/jrjc

    1. Jersey:使用Jersey调用REST API并阅读响应。

    2. 如果您使用的是Spring,则可以使用RestTemplate。我在这里有一个小样本:https://github.com/somaiah/restTemplate

    3. 当然,你有很多选择 - 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命令。