DGraph问题:查询关联数据时触发JsonSyntaxException异常
解决DGraph4j查询时Gson的JsonSyntaxException问题
你遇到的这个JsonSyntaxException问题其实很好定位——核心原因是DGraph中的边默认是多值类型。
当你在代码里创建Alice和Bob的friend关系时,DGraph并没有把friend当作单个对象存储,而是默认处理成了数组格式。但你的Person类里friend字段定义的是单个Person对象,Gson解析查询返回的JSON时,发现friend对应的是数组(BEGIN_ARRAY),但代码里期望的是单个对象(BEGIN_OBJECT),直接就报错了。
这里有两种可行的解决办法,你可以根据自己的业务需求选择:
方法一:修改Java实体类适配多值边
既然DGraph默认把边存成数组,那我们就把Person类里的friend字段改成列表类型,和返回的JSON结构匹配:
static class Person { String name; List<Person> friend; // 替换原单个Person对象为List<Person> Person() {} }
同时记得调整打印结果的逻辑,适配列表类型:
ppl.all.forEach(person -> { System.out.println(person.name); if (person.friend != null && !person.friend.isEmpty()) { person.friend.forEach(friend -> System.out.println("Friend: " + friend.name)); } else { System.out.println("No friends"); } });
方法二:修改Schema强制friend为单值边
如果你确定friend是一对一的关系,不想用列表存储,可以在定义Schema的时候给friend加上@single指令,强制DGraph把它当作单值边处理:
// 更新后的Schema String schema = "name: string @index(exact) . friend: uid @single .";
这样修改后,DGraph返回的JSON里friend就会是单个对象,你的原Person类和打印逻辑都不需要改动,直接就能正常解析了。
两种方法都能解决这个异常,你可以根据实际业务场景来选~
内容的提问来源于stack exchange,提问作者himanshuIIITian
相关产品推荐
相关产品推荐

