有人推荐一种 Unix (选择您喜欢的风格) JSON 解析器吗? 它可以用来在管道中对 JSON 响应的值进行内省?
您可以按照 这个答案中的建议尝试 Jsawk。
实际上,您可以快速编写一个 Python 脚本来完成这项工作。
您可以使用这个命令行解析器(如果愿意,您可以将其放入 bash 别名中) ,使用内置在 Perl 核心中的模块:
perl -MData::Dumper -MJSON::PP=from_json -ne'print Dumper(from_json($_))'
如果堆栈中恰好有 node.js 和 npm,那么还有 JSON 命令行处理工具包。
另一个 “ json”命令用于在 Unix 命令行上按摩 JSON。
还有其他的选择:
相关阅读: 解析 Unix JSON 输入的命令行工具?
检查 滴答。
这是一个真正的 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"]``
有人提到 Jshon 或 JSON.sh 吗?
Https://github.com/keenerd/jshon
将 JSON 导向它,然后遍历 JSON 对象,输出到当前对象的路径(作为 JSON 数组) ,然后输出到对象的路径,而不使用空格。
Http://kmkeen.com/jshon/ Jshon 从 stdin 加载 json 文本,执行操作,然后在 stdout 上显示最后一个操作,并且也被作为通常的文本处理管道的一部分。
我已经创建了一个专门为命令行 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 中添加问题。我很乐意优先考虑社区成员所需要的特性。
我更喜欢 python -m json.tool,它似乎在大多数 * nix 操作系统的默认情况下都是可用的。
python -m json.tool
$ echo '{"foo":1, "bar":2}' | python -m json.tool { "bar": 2, "foo": 1 }
注意: 取决于 Python 的版本,所有键可能按字母顺序排序,这可能是一件好事,也可能不是一件好事。在 python 2中,默认排序键,而在 python 3.5 + 中,它们不再自动排序,但是你可以选择显式地按键排序:
$ echo '{"foo":1, "bar":2}' | python3 -m json.tool --sort-keys { "bar": 2, "foo": 1 }
我刚刚制作了 小子,它是一个小的命令行 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" }
如果你正在寻找一个可移植的 C 编译工具:
Https://stedolan.github.io/jq/
网址:
Jq 类似于用于 JSON 数据的 Sed——你可以用它来切片、过滤、映射和转换结构化数据,就像 Sed、 嗷、 Grep和朋友们让你处理文本一样简单。 Jq 可以轻而易举地将您拥有的数据格式破坏成您想要的格式,而且这样做的程序通常比您预期的更短、更简单。
Jq 类似于用于 JSON 数据的 Sed——你可以用它来切片、过滤、映射和转换结构化数据,就像 Sed、 嗷、 Grep和朋友们让你处理文本一样简单。
Jq 可以轻而易举地将您拥有的数据格式破坏成您想要的格式,而且这样做的程序通常比您预期的更短、更简单。
Rel = “ nofollow norefrer”> https://stedolan.github.io/jq/Tutorial/ 返回文章页面 https://stedolan.github.io/jq/Manual/手册译者: 下载 : < a href = “ https://stedolan.github.io/jq/Download/”rel = “ nofollow norefrer”> https://stedolan.github.io/jq/Download/
对于 Bash/Python,下面是 Python 的 simplejson的基本包装:
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}相关的键或值,以空格分隔。
json_parser {field1} {field2}
print myjson['{field1}']['{field2}']
{field2}