頂点のすべてのプロパティをマップに配置し、このマップに値を追加しようとしています。後で、このマップを JSON レスポンスとして返したいと思います。一般に、neo4j のREST-APIは少し冗長であり、他の値の中で頂点の ID が必要です。したがって、gremlin クエリを介して直接これを行うことにしました。
結果は次のようになります。
[ {"id": 1, "name": "Name1"}, {"id": 2, "name": "Name2"} ]
次のgremlinスクリプトを使用してこれを行うことができました:
x = [];
g.v( 1 ).out.transform{
m = [:];
m.putAll( it.map() );
m.put( "id", it.id );
x.add( m )
}.iterate();
x
ただし、neo4j コミュニティ 1.8.2 および 1.9M05 では、このクエリで問題が発生しました。
a) neo4j 1.8.2 は、JSONObject の JSONArray ではなく、String の JSONArray を返します。
[ "{id: 1, name: Name1}", "{id: 2, name: Name2}" ]
b) neo4j 1.9M5 は例外を返します。
{
"message":"Invalid list type: map",
"exception":"IllegalStateException",
"stacktrace":
[
"org.neo4j.server.rest.repr.RepresentationFormat.serializeList(RepresentationFormat.java:65)",
"org.neo4j.server.rest.repr.ListRepresentation.serialize(ListRepresentation.java:50)",
"org.neo4j.server.rest.repr.OutputFormat.assemble(OutputFormat.java:179)",
"org.neo4j.server.rest.repr.OutputFormat.formatRepresentation(OutputFormat.java:131)",
"org.neo4j.server.rest.repr.OutputFormat.response(OutputFormat.java:117)",
"org.neo4j.server.rest.repr.OutputFormat.ok(OutputFormat.java:55)",
"org.neo4j.server.rest.web.ExtensionService.invokeGraphDatabaseExtension(ExtensionService.java:122)",
"java.lang.reflect.Method.invoke(Method.java:597)"
]
}
gremlin スクリプトを修正して x をマップに変更すると、neo4j の両方のバージョンで動作します。
x = [:];
g.v( 1 ).out.transform{
m = [:];
m.putAll( it.map() );
m.put( "id", it.id );
x.put(it.id, m );
}.iterate();
x
戻り値
{ "1" : {"id": 1, "name": "Name1"}, "2" : {"id": 2, "name": "Name2"} }
ただし、結果は、JSONObjects を含む JSONObject になります。
gremlin を使用して問題を解決する方法はありますか? 2日前にグレムリンの学習を始めたばかりです。