当前位置: 首页 > 知识库问答 >
问题:

通过Java执行http客户端时的JSONObject文本格式错误

鲁旭
2023-03-14

在下面的代码中,我正在执行HTTP客户端以获得响应。

public String exmp(StringBuilder sql, String table){
    authCache = new BasicAuthCache();
    basicAuth = new BasicScheme();
    authCache.put(target, basicAuth);

    localContext = HttpClientContext.create();
    localContext.setAuthCache(authCache);
    String postJsonstr=null;
    try {
        HttpPost httpPost = new HttpPost(API_URL);

        StringBuilder str = new StringBuilder();
        str.append("{");
        str.append("\"format\":\"csv\",");
        str.append("\"version\":\"1.0\",");
        str.append("\"name\":\""+table+"\",");
        str.append("\"encrypted\":\"none\",");
        str.append("\"queries\":[{");
        str.append("\"name\":\""+table+"\",");
        str.append("\"query\":\"" + sql + "\",");
        str.append("\"type\":\"export\"");
        str.append("}]");
        str.append("}");

        httpPost.addHeader("accept", jsonContentType);
        StringEntity posEnt = new StringEntity(str.toString().trim());
        posEnt.setContentType(jsonContentType);
        httpPost.setEntity(posEnt);

        CloseableHttpResponse response = httpclient.execute(target, httpPost, localContext);}

当我执行这段代码时,我得到的错误是:org.json.jsonException:JSONObject文本必须以“{”开头,位于1[字符2行1]

我尝试执行system.out.println((int)sb.tostring().trim().charat(0));查看第一个字符是什么,根据一些文章,它是123,这是“{”的正确代码。

更新的代码:这是我使用JSONObject更新的代码。我仍然得到同样的错误

public String exmp(StringBuilder sql, String table){
        authCache = new BasicAuthCache();
        basicAuth = new BasicScheme();
        authCache.put(target, basicAuth);

        localContext = HttpClientContext.create();
        localContext.setAuthCache(authCache);
        String postJsonstr=null;
        try {
            HttpPost httpPost = new HttpPost(API_URL);

            JSONObject sbjson = new JSONObject();
            sbjson.put("format", "csv");
            sbjson.put("version", "1.0");
            sbjson.put("name", table);
            sbjson.put("encrypted", "none");

            JSONArray array = new JSONArray();
            JSONObject item = new JSONObject();
            item.put("name", table);
            item.put("query", sql);
            item.put("type", "export");
            array.put(item);

            sbjson.put("queries", array);

            httpPost.addHeader("accept", jsonContentType);
            StringEntity postEntity = new StringEntity(sbjson.toString());
            posEnt.setContentType(jsonContentType);
            httpPost.setEntity(posEnt);

            CloseableHttpResponse response = httpclient.execute(target, httpPost, localContext);}

共有1个答案

柳弘方
2023-03-14
String.format("{\"format \":\"csv \""
            + ",\"version \":\"1.0 \""
            + ",\"name \":\"%s\""
            + ",\"encrypted \":\"none \""
            + ",\"queries \":[{\"name \":\"%s\"\""
                           + ",\"query\":\"%s\""
                           + ",\"type\":\"export\"}]}",
              table, table, sql);
 类似资料:
  • 我正在尝试基于Apache示例和FTPSClient类,使用Apache Commons网络库开发Java FTPS客户端。要运行de代码,我使用Java8,更新45。 当我调用“retrieveFile”方法时,会发生异常。我不确定,但我相信用于传输文件的连接没有使用上面指定的HTTP代理。 使用FileZilla客户端,我可以使用相同的配置传输文件。 我如何解决这个问题? 我的代码: 输出:

  • ,而项目本身可以完美地运行eclipse IDE。 我尝试了相同问题的解决方案,但错误仍然存在。这是一个maven项目,pom.xml具有所有依赖项。 有人能帮我解决这个问题,或者建议一种通过eclipse IDE执行java-callgraph的方法来达到同样的目的吗?

  • 问题内容: 我正在使用jQuery的ajax方法来获取静态JSON文件。数据是从本地文件系统加载的,因此没有服务器,因此无法更改MIME类型。 我相信我的JSON格式正确: 我的ajax调用很简单: 如果我用文档标签包装JSON: 正如上面提到的另一个Stack Overflow问题中提到的那样,ajax调用失败,并出现解析错误。 因此:在读取客户端JSON文件时,有没有一种方法可以避免Firef

  • 我试图自动化Web服务,并以字符串的形式传递XML,然后将其转换为字符串实体并设置实体。但我不知道为什么会抛出400错误。我是WebServices Automation的新手,请在这方面帮助我。 以下是我的代码:

  • 使用java-version:1.8.0_171,我试图连接到API网关,但使用java8却得到一个SSL handshake_failure。已经运行的命令: 启用时,我得到了以下信息: 更新

  • 在Intellij IDEA中,当我在终端中运行java文件或运行jar工件时,我会得到以下错误: 我的电脑上安装了最新的jdk和运行时环境,我只安装了一个运行时环境。另外,我对程序的实际编译没有问题,只有“$java program”命令。