任何人都可以推荐一个Unix(选择你的风味)JSON解析器,它可以用来内省管道中JSON响应的值吗?
答案 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
它可以让你轻松地做强大的事情:
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)
如果你的堆栈中碰巧有node.js和npm,还有JSON command line processing toolkit。
另一个"json" command用于在Unix命令行上按摩JSON。
以下是其他选择:
答案 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"
}