我有一个Java程序,它将动态地为ElasticSearch构建一些参数的查询。目前,我构建这个的方式逃脱了字符串,因为JsonObject作为Google GSON库的一部分需要传递一个字符串来附加JSON。
以下方法的输出如下:
{
"query":{
"bool":{
"filter":[
{
"exists":"{\"field\":\"user_id\"}"
},
{
"exists":"{\"field\":\"campaign_id\"}"
}
]
}
}
}
如您所见,存在的值是转义,ElasticSearch对此提出了一个合适的建议。如果没有转义字符串,我如何实现这个结果?
JsonObject buildQuery() {
JsonObject request = new JsonObject();
// build the terms query
JsonArray termsArr = new JsonArray();
termsArr.add(buildFilterQueryForField("user_id"));
termsArr.add(buildFilterQueryForField("campaign_id"));
JsonObject terms = JsonHelper.createObject("bool.filter", termsArr);
request.add("query", terms);
return request;
}
下面是< code > buildFilterQueryForField(*)的代码。在这个方法中,我试图使用一个正则表达式来删除这些,但是这个正则表达式没有给出我想要的结果。
static JsonObject buildFilterQueryForField(String fieldName) {
JsonObject builder = new JsonObject();
JsonObject nestedObj = new JsonObject();
nestedObj.addProperty("field", fieldName);
builder.addProperty("exists", nestedObj.toString().replaceAll("\\\\", ""));
return builder;
}
这方面的最终目标如下:
{
"query":{
"bool":{
"filter":[
{
"exists": { "field": "user_id" }
},
{
"exists": { "field": "campaign_id" }
},
]
}
}
}
这些转义是必需的,因为您实际上是在exists
字段的字符串值中嵌入另一个json对象。您应该使用builder而不是
addProperty。add(“exists”,nestedObj)
就像在其他地方一样。
我想转动这根绳子: 到这个里面 用似乎没有明显的方法来做到这一点? 更准确地说,我想将反斜杠的转义改为转义字符。
问题内容: 我有一个像这样的URL: 在字符串对象中。 有人可以告诉我,如何删除反斜杠吗? 我正在为黑莓系统编程。 问题答案: 参见String.replace(CharSequence,CharSequence)
问题内容: 我从公共API接收到一个JSON对象,该对象本身具有一个转义的JSON字符串。 我如何将此属性转换为实际的JSON对象(未转义),以便使用NewtonSoft Json.NET反序列化整个响应? 问题答案: 这是我根据 Sam 的答案使用的可行解决方案:
问题内容: 这是我的字符串: 我正在使用代码从SSH命令检索输出,并且我希望我的字符串仅包含 如何删除多余的转义序列? 问题答案: 使用正则表达式删除它们: 或者,在没有VERBOSE标志的情况下,以压缩形式: 演示: 上面的正则表达式涵盖所有7位ANSI C1转义序列,但不包括8位C1转义序列打开器。后者在当今的UTF-8世界中从未使用过,在UTF-8世界中,相同范围的字节具有不同的含义。 如果
问题内容: 为了回答这个问题,我设法通过转义反斜杠来使字符串成为转义字符。 当我尝试将其概括为转义所有转义的字符时,它似乎无能为力: 但是对于特定的转义字符使用相同的方法,它确实起作用: 有一般的方法可以做到这一点吗?应包括,,,等。 问题答案: 使用r’text’将字符串定义为raw,如下面的代码所示: