Unix 命令行 JSON 解析器? ?

有人推荐一种 Unix (选择您喜欢的风格) JSON 解析器吗? 它可以用来在管道中对 JSON 响应的值进行内省?

130994 次浏览

您可以按照 这个答案中的建议尝试 Jsawk

实际上,您可以快速编写一个 Python 脚本来完成这项工作。

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

perl -MData::Dumper -MJSON::PP=from_json -ne'print Dumper(from_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

  • FLEXIBLE -用于处理 JSON 数据的“瑞士军刀”工具-可以作为一个简单的美观打印机使用,也可以作为一个全功能的 Javascript 命令行使用
  • POWERFUL -公开 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 中添加问题。我很乐意优先考虑社区成员所需要的特性。

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

$ 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——你可以用它来切片、过滤、映射和转换结构化数据,就像 SedGrep和朋友们让你处理文本一样简单。

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的基本包装:

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