Java-处理提供JSON文档的Marklogic eval响应
我有一个MarkLogic XQuery eval调用,它返回字符串列表。我使用下面的代码来处理结果。我有另一个调用,它返回一个Json文档列表,但我不知道如何让EvalResult给我一个JsonDocument文档。如何更改以下代码以处理Json文档Java-处理提供JSON文档的Marklogic eval响应,java,marklogic,Java,Marklogic,我有一个MarkLogic XQuery eval调用,它返回字符串列表。我使用下面的代码来处理结果。我有另一个调用,它返回一个Json文档列表,但我不知道如何让EvalResult给我一个JsonDocument文档。如何更改以下代码以处理Json文档 public static ArrayList<String> getStringList(DatabaseClient client, String query) { ArrayList<String
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;
}
publicstaticarraylistgetstringlist(数据库客户端,字符串查询)
{
ArrayList字符串=新的ArrayList();
ServerEvaluationCall eval=client.newServerEval();
evalResulterator eri=eval.xquery(query.eval();
while(eri.hasNext())
{
EvalResult er=eri.next();
字符串s=er.getString();
字符串。添加(s);
}
返回字符串;
}
首先,我建议您将eval作为最后手段,因为它可能会打开安全漏洞。如果从不从客户端发送要在服务器上执行的代码,则不可能进行注入攻击。先从开箱即用的特性开始,如果这些还不够,考虑写A而不是使用EVAL。两个例子是和
但要回答您的问题,请更改以下内容:
String s = er.getString();
为此:
JacksonHandle handle = er.get(new JacksonHandle());
JsonNode json = handle.get();
或者通过这个快捷方式:
JsonNode json = er.getAs(JsonNode.class);
有关完整示例,请参见myArray和myObject(当然还有)和的处理
无论您是从文档读取、搜索还是评估中获得JSON结果,这些Jackson句柄的工作原理都是一样的。您可以阅读有关io快捷方式的更多信息。有关Jackson的更多示例代码,请参阅、和 非常感谢-我会试试的。是的,那很有效!!仅供参考-我非常接近-我尝试过的(除其他外)是er.getAs(JacksonHandle.class),但这只是一个例外。