Java 集合REST查询引发格式错误的DJSONException

Java 集合REST查询引发格式错误的DJSONException,java,rest,exception,rally,malformed,Java,Rest,Exception,Rally,Malformed,我正试图从Rally数据库中查询一些东西。现在我只是想确保我能一开始就通过。此代码: //create rallyrest object RallyRestApi restApi = new RallyRestApi(new URI(hostname), username, password); restApi.setApplicationName("QueryTest"); restApi.setWsapiVersion("v2.0"); restApi.setApplicationVersi

我正试图从Rally数据库中查询一些东西。现在我只是想确保我能一开始就通过。此代码:

//create rallyrest object
RallyRestApi restApi = new RallyRestApi(new URI(hostname), username, password);
restApi.setApplicationName("QueryTest");
restApi.setWsapiVersion("v2.0");
restApi.setApplicationVersion("1.1");
System.out.println("1: So far, so good -- RallyRestApi object created");

    try {

        //create query request
        String type = "HierarchicalRequirement";
        QueryRequest qreq = new QueryRequest(type);
        System.out.println("2: Still going -- Query Request Created");

        //set fetch, filter, and project
        qreq.setFetch(new Fetch("Name","FormattedID"));
        qreq.setQueryFilter(new QueryFilter("Name", "contains", "freight"));
        qreq.setProject(projectNumber);

        System.out.println("3: Going strong -- Fetch, Filter, and Project set");

        //create response from query********Blows up
        QueryResponse resp = restApi.query(qreq);
        System.out.println("4: We made it!");

    } catch (Exception e) {
    System.out.println("Error: " + e);
    }
    finally {
        restApi.close();
    }
  }
给我这个错误:

Exception in thread "main" com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Use JsonReader.setLenient(true) to accept malformed JSON at line 1 column 22
at com.google.gson.JsonParser.parse(JsonParser.java:65)
at com.google.gson.JsonParser.parse(JsonParser.java:45)
at com.rallydev.rest.response.Response.<init>(Response.java:25)
at com.rallydev.rest.response.QueryResponse.<init>(QueryResponse.java:18)
at com.rallydev.rest.RallyRestApi.query(RallyRestApi.java:227)
at RQuery.main(RQuery.java:65)

Caused by: com.google.gson.stream.MalformedJsonException: Use JsonReader.setLenient(true) to accept malformed JSON at line 1 column 22
at com.google.gson.stream.JsonReader.syntaxError(JsonReader.java:1505)
at com.google.gson.stream.JsonReader.checkLenient(JsonReader.java:1386)
at com.google.gson.stream.JsonReader.doPeek(JsonReader.java:531)
at com.google.gson.stream.JsonReader.peek(JsonReader.java:414)
at com.google.gson.JsonParser.parse(JsonParser.java:60)
... 5 more
Java Result: 1
有人能解释一下为什么会这样吗?我的代码错了吗?如果我需要按照错误建议执行并设置Json.lenienttrue,请告诉我如何使用代码执行此操作


谢谢大家!

你的代码适合我。我看代码没有任何问题。 尝试不同的查询,可能有一些额外的字符。 请参阅-它提到了尾随NUL\0字符的大小写。也许您需要将lenient设置为true,但我不知道如何操作:在使用Rally QueryResponse时,无法直接访问它

尝试不同查询的原因是有两个本地因素:java环境和数据。MalformedJsonException表示指向数据的错误json。您只获取Name和FormattedID,因此罪魁祸首可能就在名称的某个地方。尝试其他查询,例如FormattedID=US123,但选择名称中不包含运费的故事。确定至少有一个特定的查询是有效的——这将进一步表明问题确实与数据有关,而不是与环境有关

接下来,尝试将相同的查询名称直接包含在中,这是一个可以测试查询的交互式文档。也可以将代码中查询的等效项粘贴到浏览器中:

https://rally1.rallydev.com/slm/webservice/v2.0/hierarchicalrequirement?workspace=https://rally1.rallydev.com/slm/webservice/v2.0/workspace/123&query=(Name%20contains%20%22fraight%22)&start=1&pagesize=200&fetch=Name,FormattedID
确保将/workspace/123中的123替换为工作区的有效OID

查询是否返回或在浏览器中看到相同的错误? 如果查询返回,那么TotalResultCount是多少

总结果计数将有助于进一步排除故障。您可以一次运行一页代码,并且知道TotalResultCount,因此可以操纵pagesize、start和limit,将代码缩小到存在罪犯故事的页面(假设存在罪犯故事)。以下是一个例子:

qreq.setPageSize200; qreq.setStart2; qreq.setLimit200

最大页面大小为200。默认值为20。要使用的实际数字取决于TotalResultCount。 查询的开始索引从1开始。默认值为1。在本例中,我们从第二页开始

我的环境是Java SE 1.6和以下JAR:

httpcore-4.2.4.jar

httpclient-4.2.5.jar

commons-logging-1.1.1.jar

commons-codec-1.6.jar

gson-2.2.4.jar


rally-rest-api-2.0.4.jar

感谢您的回复。我把所有的罐子都准备好了。我很难把宽恕变成真的。你能给我举一个如何使用我的代码的例子吗?虽然我看过许多JsonReader的示例,但我不确定如何将其用于我的QueryResponse。另一个示例使用了StringReader,不确定是否/如何做到。。。?。谢谢。您是否尝试过更改查询以查看不同的数据子集是否成功返回?是的,我尝试过更改所有内容:类型、获取、查询过滤器、注释掉所有非必要的设置,如ApplicationVersion等。我找到了它。这是一个稍微错误的url。现在我得到了正确的JSON。谢谢你的帮助!