为什么Kibana仪表板定义在存储到ElasticSearch时会被转义

时间:2014-05-05 13:19:07

标签: elasticsearch kibana

我想使用ElasticSearch分享Kibana仪表板定义,但我发现定义仪表板的部分在ES文档中转义

{
  "user" : "guest",
  "group" : "guest",
  "title": "Test",
  "dashboard": "{\"title\":\"Hardware Monitor\"}"
}

为什么?它使仪表板定义的手动编辑变得令人不快和容易出错。

1 个答案:

答案 0 :(得分:1)

查看JSON文档的顶级。它是一堆键和值,两者都用引号括起来,例如

  

"用户" :"嘉宾"

现在,他们已将描述仪表板的文档作为"仪表板"的值。键。如果它是一个简单的字符串,它可能如下所示:

  

"信息中心" :"早上好!"

但是你可以看到它不是一个简单的文档 - 仪表板是用自己的JSON文档定义的。

  

"标题" :"硬件监视器"

请注意,此文档只是另一组键和值,两者都在引号中,就像之前一样。

现在,如果你简单地将它们放在一起,你就会得到:

  

"信息中心" :"" title":"硬件监视器""

JSON解析器在引号中查找键值,因此开头如下所示:

  

"信息中心" :""

然后你就会留下一堆非JSON。

使用引号,您真的不知道它是打开新引号还是关闭前一个引号,因此解析器需要您的帮助。

这种帮助以内部引用的转义(删除值)的形式出现,如下所示:

  

"名称" :" William Royce \" Boz \" Scaggs"

现在,解析器可以轻松判断值的开始和结束位置。

如果你正在编写代码,那么在一对双引号中使用单引号是常见的技巧(反之亦然),如下所示:

grep '"Lido Shuffle"' file

会在给定文件中查找字符串Lido Shuffle - 用双引号括起来。

在处理像Kibana这样的随机人类输入时,这并不总是有效。用户可能想要命名他们的仪表板"不要看这里"或者' 8" Rain',所以报价很快就会变得奇怪。转义引号是处理它的通用方法。

希望有所帮助。