Java – 处理提供JSON文档的Marklogic eval响应

我有一个MarkLogic XQuery eval调用,它返回一个字符串列表.我使用下面的代码来处理结果.我有另一个调用返回一个Json文档列表,但我看不到如何让EvalResult给我一个JsonDocument文档.如何更改以下代码以处理Json文档?

   public static ArrayList<String> getStringList(DatabaseClient client, String query)
   {
      ArrayList<String> strings = new ArrayList<String>();
      ServerEvaluationCall eval = client.newServerEval();
      EvalResultIterator eri = eval.xquery(query).eval();
      while (eri.hasNext())
      {
         EvalResult er = eri.next();
         String s = er.getString();
         strings.add(s);
      }
      return strings;
   }

最佳答案 首先,我建议你只使用eval作为最后的手段,因为它可能会打开一个安全漏洞.如果您从不从客户端发送代码以在服务器上执行,则无法进行注入攻击.首先使用开箱即用的功能,如果这些功能还不够,请考虑编写
resource extension而不是使用eval.两个例子是
ResourceExtension
JavascriptResourceExtension.

但要回答你的问题,请改变这个:

     String s = er.getString();

对此:

     JacksonHandle handle = er.get(new JacksonHandle());
     JsonNode json = handle.get();

或这个快捷方式:

     JsonNode json = er.getAs(JsonNode.class);

有关完整示例,请参阅myArray和myObject EvalTest.evalAndInvokeXQuery(当然还有runAndTestXQuery)和evaltest.xqy的处理.

无论您是从文档读取,搜索还是评估获得JSON结果,这些Jackson句柄的工作方式都相同.您可以阅读有关io快捷方式here的更多信息.有关Jackson的更多示例代码,请参阅JacksonHandleExample,JacksonHandleTest,JacksonStreamTestJacksonDatabindTest.

点赞