Continuing discussion from here.
I've a query that provides list of paths along-with elementMap(). How do I convert this data to JSON to be consumed by rest of the code.
I did look here that talks about using GraphSONMapper
.
However, I am using gremlinpython
(v 3.6.1) and I couldn't find GraphSONMapper
with
the library. There is graphsonV2d0.py
and graphsonV3d0.py
, but not clear on using that.
Sample Graph:
g.addV('color-group').property(id,1).property(single, 'Color', 'primary').next()
g.addV('primary-color').property(id,2).property(single, 'Color', 'red').next()
g.addV('primary-color').property(id,3).property(single, 'Color', 'blue').next()
g.addV('primary-color').property(id,4).property(single, 'Color', 'yellow').next()
g.addV('secondary-color').property(id,5).property(single, 'Color', 'red-10').next()
g.V(1).addE('links').to(V(2)).property(single, 'Key', 'value').next()
g.V(1).addE('links').to(V(3)).property(single, 'Key', 'value').next()
g.V(1).addE('links').to(V(4)).property(single, 'Key', 'value').next()
g.V(4).addE('links').to(V(5)).property(single, 'Key', 'value').next()
Query:
g.V().hasLabel('color-group').has('Color', 'primary').outE().inV().optional(outE().inV()).path().by(elementMap()).store('data').cap('data').next()
Current Result:
[path[{<T.id: 1>: 1, <T.label: 4>: 'color-group', 'Color': 'primary'}, {<T.id: 1>: 7, <T.label: 4>: 'links', <Direction.IN: 2>: {<T.id: 1>: 2, <T.label: 4>: 'primary-color'}, <Direction.OUT: 3>: {<T.id: 1>: 1, <T.label: 4>: 'color-group'}, 'Key': 'value'}, {<T.id: 1>: 2, <T.label: 4>: 'primary-color', 'Color': 'red'}], path[{<T.id: 1>: 1, <T.label: 4>: 'color-group', 'Color': 'primary'}, {<T.id: 1>: 8, <T.label: 4>: 'links', <Direction.IN: 2>: {<T.id: 1>: 3, <T.label: 4>: 'primary-color'}, <Direction.OUT: 3>: {<T.id: 1>: 1, <T.label: 4>: 'color-group'}, 'Key': 'value'}, {<T.id: 1>: 3, <T.label: 4>: 'primary-color', 'Color': 'blue'}], path[{<T.id: 1>: 1, <T.label: 4>: 'color-group', 'Color': 'primary'}, {<T.id: 1>: 9, <T.label: 4>: 'links', <Direction.IN: 2>: {<T.id: 1>: 4, <T.label: 4>: 'primary-color'}, <Direction.OUT: 3>: {<T.id: 1>: 1, <T.label: 4>: 'color-group'}, 'Key': 'value'}, {<T.id: 1>: 4, <T.label: 4>: 'primary-color', 'Color': 'yellow'}, {<T.id: 1>: 10, <T.label: 4>: 'links', <Direction.IN: 2>: {<T.id: 1>: 5, <T.label: 4>: 'secondary-color'}, <Direction.OUT: 3>: {<T.id: 1>: 4, <T.label: 4>: 'primary-color'}, 'Key': 'value'}, {<T.id: 1>: 5, <T.label: 4>: 'secondary-color', 'Color': 'red-10'}]]
How to convert above to get following Output in JSON?
Truncated rest as patter is same.
[[{
"< T.id: 1 >": 1,
"< T.label: 4 >": "color-group",
"Color": "primary"
}, {
"< T.id: 1 >": 7,
"< T.label: 4 >": "links",
"< Direction.IN: 2 >": {
"< T.id: 1 >": 2,
"< T.label: 4 >": "primary-color"
},
"< Direction.OUT: 3 >": {
"< T.id: 1 >": 1,
"< T.label: 4 >": "color-group"
},
"Key": "value"
}, {
"< T.id: 1 >": 2,
"< T.label: 4 >": "primary-color",
"Color": "red"
}], ..... ]
EDIT 1.
I was able to make some progress using graphsonV3d0
from gremlin_python.structure.io import graphsonV3d0
obj = graphsonV3d0.GraphSONWriter()
query = g.V().hasLabel('color-group').has('Color', 'primary').outE().inV().optional(outE().inV()).path().by(elementMap()).store('data').cap('data').next()
obj.to_dict(query)
Result:
{'@type': 'g:List', '@value': [path[{<T.id: 1>: 1, <T.label: 4>: 'color-group', 'Color': 'primary'}, {<T.id: 1>: 7, <T.label: 4>: 'links', <Direction.IN: 2>: {<T.id: 1>: 2, <T.label: 4>: 'primary-color'}, <Direction.OUT: 3>: {<T.id: 1>: 1, <T.label: 4>: 'color-group'}, 'Key': 'value'}, {<T.id: 1>: 2, <T.label: 4>: 'primary-color', 'Color': 'red'}], path[{<T.id: 1>: 1, <T.label: 4>: 'color-group', 'Color': 'primary'}, {<T.id: 1>: 8, <T.label: 4>: 'links', <Direction.IN: 2>: {<T.id: 1>: 3, <T.label: 4>: 'primary-color'}, <Direction.OUT: 3>: {<T.id: 1>: 1, <T.label: 4>: 'color-group'}, 'Key': 'value'}, {<T.id: 1>: 3, <T.label: 4>: 'primary-color', 'Color': 'blue'}], path[{<T.id: 1>: 1, <T.label: 4>: 'color-group', 'Color': 'primary'}, {<T.id: 1>: 9, <T.label: 4>: 'links', <Direction.IN: 2>: {<T.id: 1>: 4, <T.label: 4>: 'primary-color'}, <Direction.OUT: 3>: {<T.id: 1>: 1, <T.label: 4>: 'color-group'}, 'Key': 'value'}, {<T.id: 1>: 4, <T.label: 4>: 'primary-color', 'Color': 'yellow'}, {<T.id: 1>: 10, <T.label: 4>: 'links', <Direction.IN: 2>: {<T.id: 1>: 5, <T.label: 4>: 'secondary-color'}, <Direction.OUT: 3>: {<T.id: 1>: 4, <T.label: 4>: 'primary-color'}, 'Key': 'value'}, {<T.id: 1>: 5, <T.label: 4>: 'secondary-color', 'Color': 'red-10'}]]}
This is little better, but yet not entirely in JSON format.