76

GRON:一款让使JSON可以Grep的工具

 6 years ago
source link: http://www.freebuf.com/sectool/159097.html?amp%3Butm_medium=referral
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

GRON:一款让使JSON可以Grep的工具 - FreeBuf网络安全行业门户user形状结合怀旧限时体验热度Fill 3编组备份 4APP库新版Fill 6网页灯泡形状结合形状结合小蜜蜂

主站
漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全
头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课
行业服务
政 府
CNCERT CNNVD
会员体系(甲方) 会员体系(厂商) 产品名录 企业空间
知识大陆
试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
GRON:一款让使JSON可以Grep的工具
喜欢文章?可以收藏噢~
可以收录到专辑噢~
GRON:一款让使JSON可以Grep的工具
Alpha_h4ck 2018-01-09 15:00:11 620421 4

今天给大家介绍一款名叫gron的JSON数据检索工具,gron不仅可以将目标JSON数据进行离散化拆分,并能够让用户更加轻松地使用grep来对数据进行搜索,而且它还能够允许用户查看到数据的绝对路径。

啊.png

下载地址:【GitHub传送门

gron的使用样例如下:

▶gron "https://api.github.com/repos/tomnomnom/gron/commits?per_page=1"| fgrep "commit.author"
json[0].commit.author= {};
json[0].commit.author.date= "2016-07-02T10:51:21Z";
json[0].commit.author.email= "[email protected]";
json[0].commit.author.name= "Tom Hudson";

gron还可以逆向工作,即它能够将你所提供的数据转换成JSON格式:

▶gron "https://api.github.com/repos/tomnomnom/gron/commits?per_page=1"| fgrep "commit.author" | gron --ungron
[
{
"commit": {
"author": {
"date":"2016-07-02T10:51:21Z",
"email":"[email protected]",
"name": "TomHudson"
}
}
}
]

gron的使用不需要任何的运行时依赖,你可以直接从gron的Github库【传送门】中下载针对不同操作系统的代码版本,目前该工具支持Linux、Mac、Windows或FreeBSD等平台。你可以直接将项目代码拷贝到自己的执行路径(例如$PATH或/usr/bin)中,以方便使用:

▶tar xzf gron-linux-amd64-0.1.5.tgz
▶sudo mv gron /usr/bin/

如果你使用的是macOS,你还可以通过brew来安装gron:

▶brew install gron

或者说,如果你使用Go,你还可以使用go get命令来完成gron的安装(Go v1.7或更高版本):

▶ go get -u github.com/tomnomnom/gron

从文件中读取JSON数据:

▶gron testdata/two.json json= {};
json.contact= {};
json.contact.email= "[email protected]";
json.contact.twitter= "@TomNomNom";
json.github= "https://github.com/tomnomnom/";
json.likes= [];
json.likes[0]= "code";
json.likes[1]= "cheese";
json.likes[2]= "meat";
json.name= "Tom";

从URL资源获取JSON数据:

▶gron http://headers.jsontest.com/
json= {};
json.Host= "headers.jsontest.com";
json["User-Agent"]= "gron/0.1";
json["X-Cloud-Trace-Context"]= "6917a823919477919dbc1523584ba25d/11970839830843610056";

从stdin获取JSON数据:

▶curl -s http://headers.jsontest.com/ | gron
json= {};
json.Accept= "*/*";
json.Host= "headers.jsontest.com";
json["User-Agent"]= "curl/7.43.0";
json["X-Cloud-Trace-Context"]= "c70f7bf26661c67d0b9f2cde6f295319/13941186890243645147";

使用grep命令搜索目标数据并查看路径:

▶gron testdata/two.json | grep twitter
json.contact.twitter= "@TomNomNom";

gron还可以结合diff命令一起使用:

▶diff <(gron two.json) <(gron two-b.json)
3c3
<json.contact.email = "[email protected]";
---
>json.contact.email = "[email protected]";

gron的输出为有效的JavaScript:

▶gron testdata/two.json > tmp.js
▶echo "console.log(json);" >> tmp.js
▶nodejs tmp.js
{contact: { email: '[email protected]', twitter: '@TomNomNom' },
github: 'https://github.com/tomnomnom/',
likes: [ 'code', 'cheese', 'meat' ],
name: 'Tom' }

Ungronning

gron还可以将它的输出数据转换为JSON格式:

▶gron testdata/two.json | gron -u{
"contact": {
"email":"[email protected]",
"twitter": "@TomNomNom"
},
"github":"https://github.com/tomnomnom/",
"likes": [
"code",
"cheese",
"meat"
],
"name": "Tom"
}

这也就意味着,你可以使用gron配合grep以及其他的工具来修改JSON数据:

▶gron testdata/two.json | grep likes | gron --ungron
{
"likes": [
"code",
"cheese",
"meat"
]
}

在保存数组键值时,如果值为空的话,gron将会以“null“填充数组:

▶gron testdata/two.json | grep likes | grep -v cheese
json.likes= [];
json.likes[0]= "code";
json.likes[2]= "meat";
▶gron testdata/two.json | grep likes | grep -v cheese | gron --ungron
{
"likes": [
"code",
null,
"meat"
]
}

关于gron的高级使用技巧,请参考【这篇文档】。

获取帮助信息

▶gron --help
TransformJSON (from a file, URL, or stdin) into discrete assignments to make itgreppable
Usage:
gron [OPTIONS] [FILE|URL|-]
Options:
-u, --ungron     Reverse the operation (turn assignmentsback into JSON)
-c, --colorize   Colorize output (default on tty)
-m, --monochrome Monochrome (don't colorizeoutput)
-s, --stream     Treat each line of input as a separateJSON object
-k, --insecure   Disable certificate validation
--no-sort    Don't sort output (faster)
--version    Print version information
ExitCodes:
0  OK
1  Failedto open file
2  Failedto read input
3  Failedto form statements
4  Failedto fetch URL
5  Failedto parse statements
6  Failedto encode JSON
Examples:
gron /tmp/apiresponse.json
gron http://jsonplaceholder.typicode.com/users/1
curl -shttp://jsonplaceholder.typicode.com/users/1 | gron
gronhttp://jsonplaceholder.typicode.com/users/1 | grep company | gron –ungron

* 参考来源:gron,FB小编Alpha_h4ck编译,转载请注明来自FreeBuf.COM

本文作者:Alpha_h4ck, 转载请注明来自FreeBuf.COM

# JSON # grep

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK