Unix命令行JSON解析器?

Jé *_*eue 125 unix configuration parsing json

任何人都可以推荐一个Unix(选择你的风味)JSON解析器,可以用来内省管道中JSON响应的值吗?

muh*_*hqu 228

我更喜欢python -m json.tool默认情况下在大多数*nix操作系统上默认可用.

$ echo '{"foo":1, "bar":2}' | python -m json.tool
{
    "bar": 2, 
    "foo": 1
}
Run Code Online (Sandbox Code Playgroud)

但应该注意的是,这将按字母顺序对所有键进行排序,这对于使用无序HashMaps的某种语言生成json的地方来说是好事还是可能是好事...

  • 这个答案没有描述如何检查指定键的值. (9认同)
  • @ColinSu但这也不是原来的问题.`json.tool`只是漂亮的印刷json的简称.如果你需要在shell脚本中提取/操作json数据,我会使用`jq`,这对于什么是真的很棒...... (8认同)
  • 低估的答案.如果目标是将给定的JSON文件验证为包含有效的JSON,那么这是一个很好的命令行替代方案. (5认同)

小智 138

如果您正在寻找便携式C编译工具:

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

来自网站:

jq就像是用于JSON数据的sed - 你可以用它来切片和过滤,映射和转换结构化数据,同样方便sed,awk,grep和朋友让你玩文本.

jq可以用很少的努力将你拥有的数据格式变成你想要的数据格式,而这样做的程序通常比你期望的更短更简单.

教程:http://stedolan.github.com/jq/tutorial/
手册:http://stedolan.github.com/jq/manual/
下载地址:http://stedolan.github.com/jq/download/

  • 这里的最佳答案imo.没有沉重的依赖,小,强大,良好的文档和轻而易举的尝试.非常感谢您的建议! (19认同)
  • 我很久以前就问过这个问题,并且学会了喜欢“jq”。 (2认同)

Dav*_*son 62

我创建了一个专门用于命令行JSON操作的模块:

https://github.com/ddopson/underscore-cli

  • 灵活 - 用于处理JSON数据的"瑞士军刀"工具 - 可以用作简单的漂亮打印机,也可以用作全功能的Javascript命令行
  • 强大 - 暴露了underscore.js的全部功能和功能(加上underscore.string)
  • 简单 - 使用类似于使用"perl -pe"的JS单行编写简单
  • CHAINED - 可以将多个命令调用链接在一起以创建数据处理管道
  • 多格式 - 丰富的输入/输出格式支持 - 漂亮的打印,严格的JSON等[即将推出]
  • DOCUMENTED - 出色的命令行文档,每个命令都有多个示例

它可以让你轻松地做强大的事情:

cat earthporn.json | underscore select '.data .title'
# [ 'Fjaðrárgljúfur canyon, Iceland [OC] [683x1024]',
#   'New town, Edinburgh, Scotland [4320 x 3240]',
#   'Sunrise in Bryce Canyon, UT [1120x700] [OC]',
# ...
#   'Kariega Game Reserve, South Africa [3584x2688]',
#   'Valle de la Luna, Chile [OS] [1024x683]',
#   'Frosted trees after a snowstorm in Laax, Switzerland [OC] [1072x712]' ]

cat earthporn.json | underscore select '.data .title' | underscore count
# 25

underscore map --data '[1, 2, 3, 4]' 'value+1'
# prints: [ 2, 3, 4, 5 ]

underscore map --data '{"a": [1, 4], "b": [2, 8]}' '_.max(value)'
# [ 4, 8 ]

echo '{"foo":1, "bar":2}' | underscore map -q 'console.log("key = ", key)'
# key = foo
# key = bar

underscore pluck --data "[{name : 'moe', age : 40}, {name : 'larry', age : 50}, {name : 'curly', age : 60}]" name
# [ 'moe', 'larry', 'curly' ]

underscore keys --data '{name : "larry", age : 50}'
# [ 'name', 'age' ]

underscore reduce --data '[1, 2, 3, 4]' 'total+value'
# 10
Run Code Online (Sandbox Code Playgroud)

它拥有最好的"智能空白"JSON格式化程序之一:

如果您有任何功能请求,请对此帖子发表评论或在github中添加问题.我很乐意优先考虑社区成员所需的功能.


Eth*_*her 17

您可以使用此命令行解析器(其中,如果你喜欢,你可以放到一个bash的别名),使用内置到Perl的核心模块:

perl -MData::Dumper -MJSON::PP=from_json -ne'print Dumper(from_json($_))'
Run Code Online (Sandbox Code Playgroud)

  • @landon:不,输入是JSON,输出是本机Perl数据结构,然后您可以继续进行操作,如果需要的话.这个单行的重点是它产生的数据更容易阅读. (6认同)

小智 12

如果你的堆栈中碰巧有node.js和npm,那么还有JSON命令行处理工具包.

另一个用于在Unix命令行上按摩JSON的"json"命令.

以下是其他选择:


相关:用于解析Unix的JSON输入的命令行工具?


Coo*_*J86 12

Checkout TickTick.

这是一个真正的Bash JSON解析器.

#!/bin/bash
. /path/to/ticktick.sh

# File
DATA=`cat data.json`
# cURL
#DATA=`curl http://foobar3000.com/echo/request.json`

tickParse "$DATA"

echo ``pathname``
echo ``headers["user-agent"]``
Run Code Online (Sandbox Code Playgroud)


hew*_*ens 8

有人提到过Jshon或JSON.sh吗?

https://github.com/keenerd/jshon

管道json到它,它遍历json对象并打印出当前对象的路径(作为JSON数组),然后打印出没有空格的对象.

http://kmkeen.com/jshon/
Jshon从stdin加载json文本,执行操作,然后在stdout上显示最后一个操作,并且还成为常用文本处理管道的一部分.