7

我正在使用 ElasticSearch 迈出第一步,并从命令行测试我目前正在使用 curl 的东西。但是这有点烦人,因为我必须在文本编辑器上输入所有内容并粘贴到控制台中(控制台中没有制表符格式),并且您获得的 json 输出未格式化。

所以我想知道是否有许多 sql 控制台的等价物来处理 json 数据,以便更容易测试和使用 json 休息 Web 服务。

你用什么工具来完成这类任务?

4

4 回答 4

6

首先,如果您获得的 json 输出未格式化,请附加?pretty=1到任何 url。结果会好很多。python -m json.tool如果您有 Python 2.6+ ,另一种选择是将输出通过管道传输到。我喜欢后一个选项,因为我将它保存到一个 shell 函数中,并且可以| j在任何输出 json 的命令之后简单地键入。更短更通用。

对于发出 curl 命令,有几个选项。最通用的解决方案是使用整个命令创建一个 shell 脚本。例如:

curl -s localhost:9200/foo/_search -d'
  {"query":
     {"query_string":
        {"query":"foo*"}}}' | python -m json.tool

与其在 shell 提示符下粘贴,不如将其保存在文件中。然后只需调整源并根据需要经常运行它。

% sh query

对此的一种变体是使用 Emacs。我用它curl在缓冲区区域上运行,操纵结果等,shell-command-on-region或者M-|在那里是一个不错的选择。所以对于上面的脚本,我可以发出M-| sh RET而不是切换到 shell。Vim 允许你做类似的事情。

我还没有检查过这个,但很多人似乎喜欢 elasticsearch-head。它是一个 UI,将发出查询并为您提供结构化结果。 http://mobz.github.com/elasticsearch-head/

更新:我最近注意到 Perl 的 JSON 模块附带一个方便的命令行实用程序,称为json_pp该函数,类似于 Python 的json.tool. 如果您安装JSON::XS还有一个(更快的)json_xs垃圾箱。

于 2012-04-29T19:18:47.450 回答
4

我发现了另一个看起来很方便的工具

http://stedolan.github.com/jq/tutorial/

curl ideasba.org/api/ideas/1 | jq .

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   525  100   525    0     0    990      0 --:--:-- --:--:-- --:--:--  2488
{
  "created": "2012-09-22T05:20:00Z",
  "author": {
    "nickname": "opensas",
    "created": "2012-09-22T01:40:00Z",
    "id": 2,
...

它有几个使用 json 的选项,比如过滤

curl ideasba.org/api/ideas/1 | jq .votes
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   525  100   525    0     0    809      0 --:--:-- --:--:-- --:--:--  2441
{
  "neg": 1,
  "pos": 8
}
于 2012-11-18T18:44:54.853 回答
2

https://github.com/micha/jsawk是最好的解决方案。

JSAWK 和 Resty 规则 :)

于 2012-05-02T01:28:17.343 回答
0

我强烈推荐Chrome 的 Sense 插件。它为您提供智能自动完成、JSON 语法检查和整理,以及漂亮的语法高亮输出。它正在积极开发中,当我想在会谈中展示请求时,它是我选择的工具。

于 2013-07-10T13:59:12.063 回答