我想使用ElasticSearch分享Kibana仪表板定义,但我发现定义仪表板的部分在ES文档中转义
{
"user" : "guest",
"group" : "guest",
"title": "Test",
"dashboard": "{\"title\":\"Hardware Monitor\"}"
}
为什么?它使仪表板定义的手动编辑变得令人不快和容易出错。
答案 0 :(得分:1)
查看JSON文档的顶级。它是一堆键和值,两者都用引号括起来,例如
"用户" :"嘉宾"
现在,他们已将描述仪表板的文档作为"仪表板"的值。键。如果它是一个简单的字符串,它可能如下所示:
"信息中心" :"早上好!"
但是你可以看到它不是一个简单的文档 - 仪表板是用自己的JSON文档定义的。
"标题" :"硬件监视器"
请注意,此文档只是另一组键和值,两者都在引号中,就像之前一样。
现在,如果你简单地将它们放在一起,你就会得到:
"信息中心" :"" title":"硬件监视器""
JSON解析器在引号中查找键值,因此开头如下所示:
"信息中心" :""
然后你就会留下一堆非JSON。
使用引号,您真的不知道它是打开新引号还是关闭前一个引号,因此解析器需要您的帮助。
这种帮助以内部引用的转义(删除值)的形式出现,如下所示:
"名称" :" William Royce \" Boz \" Scaggs"
现在,解析器可以轻松判断值的开始和结束位置。
如果你正在编写代码,那么在一对双引号中使用单引号是常见的技巧(反之亦然),如下所示:
grep '"Lido Shuffle"' file
会在给定文件中查找字符串Lido Shuffle
- 用双引号括起来。
在处理像Kibana这样的随机人类输入时,这并不总是有效。用户可能想要命名他们的仪表板"不要看这里"或者' 8" Rain',所以报价很快就会变得奇怪。转义引号是处理它的通用方法。
希望有所帮助。