如何将Gremlin Console的查询输出转换为JSON格式?
把Gremlin Console的valueMap输出转成JSON的几种方法
嘿,我来帮你搞定这个问题!要把valueMap()的输出转换成JSON格式,有几个简单实用的办法,看你需求选:
1. 直接在Gremlin查询中使用toJson()步骤
这是最直接的方式,Gremlin自带了toJson()步骤,可以把遍历结果直接序列化为JSON字符串。
执行这个命令就行:
gremlin> g.V(409608).valueMap().toJson()
输出会是标准的JSON格式,比如:
[{"eName":["FS-BR-GOJU-ENB-G001_MW"],"lng":["000086.2119100"],"modulation":["2048"],"city":["Jamshedpur"],"hopType":["1+0"],"eType":["MICROWAVE"],"cTime":["Sat Mar 03 20:37:27 IST 2018"],"aendSapId":["FS-BR-JMDP-ENB-6005"],"vendor":["CERAGON"],"domain":["MW"],"location":["POINT (86.21191 22.79906)"],"state":["Jharkhand"],"mTime":["Sat Mar 03 20:37:27 IST 2018"],"lat":["000022.7990600"],"sapId":["FS-BR-GOJU-ENB-G001"]}]
小提示:如果想把数组值转成单个值
因为valueMap()默认返回的是集合(即使字段只有一个值),如果你的数据里每个字段都是单值,可以先把结果处理成单值再转JSON:
gremlin> g.V(409608).project('eName','lng','modulation','city','hopType','eType','cTime','aendSapId','vendor','domain','location','state','mTime','lat','sapId') .by('eName').by('lng').by('modulation').by('city').by('hopType').by('eType').by('cTime').by('aendSapId').by('vendor').by('domain').by('location').by('state').by('mTime').by('lat').by('sapId') .toJson()
这样输出的JSON里值就不是数组了,比如{"eName":"FS-BR-GOJU-ENB-G001_MW",...}。
2. 配置Gremlin Console默认输出JSON格式
如果你希望每次执行查询都默认输出JSON,可以修改Console的配置文件:
- 找到Gremlin Console目录下的
conf/gremlin-console.yaml - 修改
serializer配置项为GraphSON序列化器:
serializer: className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerV3d0 config: serializeResultToString: true
- 重启Gremlin Console,之后执行
g.V(409608).valueMap()就会直接输出JSON格式了。
3. 用Groovy手动序列化结果(适合特殊场景)
如果因为某些原因不能用toJson(),可以借助Groovy的JSON工具类手动转换:
gremlin> import groovy.json.JsonBuilder gremlin> result = g.V(409608).valueMap().next() gremlin> new JsonBuilder(result).toPrettyString()
这个方法会输出格式化后的JSON,看起来更清晰。
内容的提问来源于stack exchange,提问作者TechFramer - Sanil Bagzai
相关产品推荐
相关产品推荐

