Ошибка десериализации GraphSON при использовании g:Set
У меня есть следующий файл GraphSON с именем
input.json
:
{"label":"Thing","properties":{"foo":[{"id":{"@type":"g:Int64","@value":1},"value":{"@type":"g:Set","@value":[]}}]}}
В Java я пытаюсь загрузить указанный выше файл GraphSON в граф в памяти (
org.apache.tinkerpop.tinkergraph-gremlin:3.4.10
) используя следующий код:
Graph graph = TinkerGraph.open();
GraphTraversalSource g = traversal().withGraph(graph);
g.io("input.json").read().iterate();
Однако при ее запуске я сталкиваюсь со следующей ошибкой десериализации:
java.lang.RuntimeException: org.apache.tinkerpop.shaded.jackson.databind.JsonMappingException: Could not deserialize the JSON value as required. Nested exception: org.apache.tinkerpop.shaded.jackson.databind.exc.MismatchedInputException: Cannot deserialize instance of `java.lang.String` out of START_ARRAY token
at [Source: (ByteArrayInputStream); line: 1, column: 110]
at [Source: (ByteArrayInputStream); line: 1, column: 110] (through reference chain: java.util.LinkedHashMap["properties"]->java.util.LinkedHashMap["foo"]->java.util.ArrayList[0]->java.util.LinkedHashMap["value"])
Если я изменю
{"@type":"g:Set","@value":[]}
к
[]
в файле GraphSON я больше не получаю ошибок, но теперь значение на графике вместо
Set
.
Это единственная документация, которую мне удалось найти по теме, но она не помогла мне найти решение: http://tinkerpop.apache.org/docs/3.4.1/dev/io/#_set
Я попытался заставить сериализатор создать для меня допустимое свойство, программно создав граф и затем записав его в файл, но полученный файл не содержал
g:Set
и вместо этого был
List
:
Graph graph = TinkerGraph.open();
GraphTraversalSource g = traversal().withGraph(graph);
g.addV("Thing").property("foo", Set.of("bar")).iterate();
g.io("output.json").write().iterate();
{"id":{"@type":"g:Int64","@value":0},"label":"Thing","properties":{"foo":[{"id":{"@type":"g:Int64","@value":1},"value":["bar"]}]}}
Что мне не хватает?