Unix命令行JSONparsing器?

任何人都可以推荐一个Unix(select你的味道)JSONparsing器,可以用来反思从pipe道中的JSON响应值?

首先,从CPAN安装JSON模块:

 cpan JSON 

然后你可以使用这个命令行parsing器(如果你喜欢,你可以把它放在一个bash别名中):

 perl -MData::Dumper -MJSON=from_json -ne'print Dumper(from_json($_))' 

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

 $ echo '{"foo":1, "bar":2}' | python -m json.tool { "bar": 2, "foo": 1 } 

但应该指出的是,这将按字母顺序对所有键进行sorting,在使用无序HashMap的某种语言生成json的地方,这可能是一件好事。

如果你正在寻找一个可移植的C编译工具:

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

从网站:

jq就像是sed的JSON数据 – 你可以用它来分割和过滤,并映射和转换sedawkgrep和朋友让你玩文本一样简单的结构化数据。

jq可以很轻松地将你所需要的数据格式转换成你想要的数据格式,而这样做的程序往往比你期望的更短,更简单。

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

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

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

  • 灵活 – 用于处理JSON数据的“瑞士军刀”工具可以用作简单的漂亮打印机,也可以用作全function的JavaScript命令行
  • 强大 – 揭示了underscore.js的全部function和function(加上underscore.string)
  • 简单 – 使用类似于使用“perl -pe”编写JS单行程序很简单
  • CHAINED – 可以将多个命令调用链接在一起以创build数据处理pipe道
  • 多格式 – 丰富的input/输出格式支持 – 漂亮的打印,严格的JSON等[即将推出]
  • 文档 – 每个命令都有多个示例的优秀命令行文档

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

 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 

它有一个最好的“智能空白”JSON格式化器可用:

如果你有任何function请求,评论这个职位或在github中添加一个问题。 我很乐意优先考虑社区成员所需的function。

签出TickTick 。

这是一个真正的Bash JSONparsing器。

 #!/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"]`` 

如果您的堆栈中恰好有node.js和npm,还有JSON命令行处理工具包 。

另一个“json”命令用于在Unix命令行上对JSON进行按摩。

以下是其他的select:

  • jq: http ://stedolan.github.io/jq/
  • json:select: http : //jsonselect.org/
  • json-command: https : //github.com/zpoley/json-command
  • JSONPath: http ://goessner.net/articles/JsonPath/,http: //code.google.com/p/jsonpath/wiki/Javascript
  • jsawk: https : //github.com/micha/jsawk
  • jshon: http ://kmkeen.com/jshon/
  • json2: https : //github.com/vi/json2

相关: 用于parsingUnix的JSONinput的命令行工具?

任何人提到Jshon或JSON.sh?

https://github.com/keenerd/jshon

pipe道JSON到它,它遍历JSON对象,打印出当前对象的path(作为JSON数组),然后打印对象,没有空白。

http://kmkeen.com/jshon/
Jshon从stdin加载json文本,执行动作,然后显示stdout上的最后一个动作,也被作为通常的文本处理pipe道的一部分。

你可以按照这个答案中的build议尝试jsawk 。

真的,你可以掀起一个快速的Python脚本来做到这一点。

对于Bash / Python ,下面是Python的simplejson一个基本包装:

 json_parser() { local jsonfile="my_json_file.json" local tc="import simplejson,sys; myjsonstr=sys.stdin.read(); "` `"myjson=simplejson.loads(myjsonstr);" # Build python print command based on $@ local printcmd="print myjson" for (( argn=1; argn<=$#; argn++ )); do printcmd="$printcmd['${!argn}']" done local result=$(python -c "$tc $printcmd.keys()" <$jsonfile 2>/dev/null \ || python -c "$tc $printcmd" <$jsonfile 2>/dev/null) # For returning space-separated values echo $result|sed -e "s/[]|[|,|']//g" #echo $result } 

它实际上只处理嵌套字典样式的数据,但它适用于我所需要的,对于遍历json非常有用。 它可能可以适应口味。

无论如何,那些不希望在另一个外部依赖中获取资源的东西本土。 当然,除了python。

防爆。 json_parser {field1} {field2}将运行print myjson['{field1}']['{field2}'] ,产生与{field2}关联的键或值,以空格分隔。

我只是做了jkid ,这是一个小的命令行JSON浏览器,我轻松地探索大JSON对象。 对象可以“横向”探索,并有一个“预览”选项,以避免控制台溢出。

 $ echo '{"john":{"size":20, "eyes":"green"}, "bob":{"size":30, "eyes":"brown"}}' > test3.json $ jkid . eyes test3.json object[.]["eyes"] { "bob": "brown", "john": "green" }