命令行JSON,CSV数据处理工具简介

2014-01-01 11:03

简介

json现在是最流行的数据交换格式了,但是在命令行中显示, 查找, 处理, 还是不如纯文本方便, 但是有了下面这些工具, 处理json数据可以易如反掌了。。 以下只介绍OS X平台, Linux下相应工具也都有, 建议自己折腾就不介绍了, 至于windows用户, 自己想办法。。。

准备工作

用到的工具

获取json文件

  1. 可以用curl, 比如curl https://registry.npmjs.org > registry.json
  2. 还可以用wget, 比如wget https://registry.npmjs.org -o registry.json
  3. 或者你从其他地方弄一个json文件过来

查看json文件

cat registry.json

校验json

cat registry.json | json_verify

或者:

cat invalid.json | python -mjson.tool

格式化json

cat registry.json | json_reformat

或者:

cat invalid.json | python -mjson.tool

高亮

cat registry.json | json_reformat | pygmentize -l javascript

或者:

cat registry.json | jq .

json中查找数据

以下以https://registry.npmjs.org/underscore这个json文件为素材, 可以使用 curl https://registry.npmjs.org/underscore > u.json 获取这个文件

查看某个属性

jq '._id' u.json # 'underscore'

查看某2个属性

jq '._id, .description' u.json
# ->
# "underscore"
# "JavaScript's functional programming helper library."

看看一个数组

jq '.versions["1.0.3"].keywords' u.json # ["util","functional","server","client","browser"]

查看一个数组的第1个值

jq '.versions["1.0.3"].keywords[1]' u.json # "functional"

过滤属性

jq '.versions["1.0.3"] | .name, .author.name' u.json
# ->
# "underscore"
# "Jeremy Ashkenas"

更多的例子请参考 man page: man jq

转换jsoncsv

cat registry.json | json2csv -k db_name,doc_count,update_seq
# registry,52964,870607

处理csv格式的数据

排序 csvsort

查看 csvlook

保存到数据库里 csvsql

用XPath和CSS选择器进行HTML信息提取 scrape

curl -s 'http://en.wikipedia.org/wiki/List_of_countries_and_territories_by_border/area_ratio' | scrape -b -e 'table.wikitable > tr:not(:first-child)' 

把XML转换成JSON xml2json

curl -s 'http://en.wikipedia.org/wiki/List_of_countries_and_territories_by_border/area_ratio' | scrape -be 'table.wikitable > tr:not(:first-child)' | xml2json | jq -c '.html.body.tr[] | {country: .td[1][], border: .td[2][], surface: .td[3][], ratio: .td[4][]}' | head

未完待续...