Мы используем функцию lang::json::IO::writeJSON()
для сериализации некоторых данных в файл JSON.
Это прекрасно работало, пока мы не попытались сохранить местоположение метода. Местоположение содержит начальную строку и столбец между символами <
и >
, что, по-видимому, не является проблемой для записи в файл JSON (он записывается в виде строки, не пытаясь ничего проанализировать).
Проблема начинается, когда вы хотите использовать lang::json::IO::readJSON
с местоположением, сохраненным в виде строки. Rascal пытается разобрать строку как объект, и терпит неудачу.
Например:
rascal>map[str, loc] metrics = ();
map[str, loc]: ()
rascal>metrics["test"] = a;
map[str, loc]: ("test":|project:///rascal/bla.java|(0,0,<0,0>,<1,0>))
rascal>writeJSON(|file:///tmp/test.json|,metrics);
ok
rascal>metrics = readJSON(#map[str, loc], |file:///tmp/test.json|);
|std:///lang/json/IO.rsc|(925,2980,<30,0>,<58,160>): IO("could not parse URI:$.test")
at *** somewhere ***(|std:///lang/json/IO.rsc|(925,2980,<30,0>,<58,160>))
at readJSON(|std:///lang/json/IO.rsc|(3873,30,<58,128>,<58,158>))
Есть ли лучший способ сериализации / десериализации loc
экземпляров в файл JSON?
Оцените вашу помощь с этим!