Unix命令行JSON解析器?

时间:2010-10-04 20:00:22

标签: json parsing unix configuration

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

10 个答案:

答案 0 :(得分:221)

我更喜欢python -m json.tool,默认情况下,大多数* nix操作系统默认情况下都可以使用$ echo '{"foo":1, "bar":2}' | python -m json.tool { "bar": 2, "foo": 1 }

{{1}}

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

答案 1 :(得分:134)

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

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

来自网站:

  

jq类似于 sed 的JSON数据 - 您可以使用它来切片和过滤,映射和转换结构化数据,与 sed awk一样轻松 grep 和朋友可以让你玩文字。

     

jq可以轻松地将您拥有的数据格式转换为您想要的数据格式,并且执行此操作的程序通常比您预期的更短更简单。

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

答案 2 :(得分:60)

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

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

  • 灵活 - 用于处理JSON数据的“瑞士军刀”工具 - 可以用作简单的漂亮打印机,也可以用作全功能的Javascript命令行
  • 强大 - 公开underscore.js的全部功能和功能(加上underscore.string)
  • SIMPLE - 使用类似于“perl -pe”的JS单行编写简单
  • CHAINED - 可以将多个命令调用链接在一起以创建数据处理管道
  • MULTI-FORMAT - 对输入/输出格式的丰富支持 - 漂亮的打印,严格的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

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

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

答案 3 :(得分:15)

您可以使用此命令行解析器(如果您愿意,可以将其放入bash别名中),使用Perl核心内置的模块:

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

答案 4 :(得分:12)

结帐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"]``

答案 5 :(得分:11)

答案 6 :(得分:8)

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

https://github.com/keenerd/jshon

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

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

答案 7 :(得分:2)

您可以按jsawk中的建议尝试this answer

你真的可以用快速的python脚本来做这件事。

答案 8 :(得分:1)

对于 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}相关联的键或值,以空格分隔。

答案 9 :(得分:0)

我刚刚制作了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"
}