我正在尝试编写一个工具,它将从用户那里获取json模式,在那里他们可以指定要从json中提取的属性并保存它。
我发现使用jsonschema和jsonschema2pojo,我可以用schema和json生成pojo但是我不想在所有100个实例中创建File,而是我想创建内存类并想要转换我的json那个班。
String schemaJson = IOUtils.toString(TrySchema.class.getClassLoader()
.getResourceAsStream("olympic-schema.json"));
JCodeModel codeModel = new JCodeModel();
GenerationConfig config = new DefaultGenerationConfig() {
@Override
public boolean isGenerateBuilders() { // set config option by overriding method
return true;
}
};
SchemaMapper mapper = new SchemaMapper(new RuleFactory(config, new Jackson2Annotator(config), new SchemaStore()), new SchemaGenerator());
mapper.generate(codeModel, "ClassName", "com.example", schemaJson);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
CodeWriter codeWriter = new SingleStreamCodeWriter(baos);
codeModel.build(codeWriter);
String code = baos.toString(); // you can use toString(charset) if there are special characters in your code
System.out.println(code);
ParseContext parseContext = JsonPath.using(Configuration.builder()
.jsonProvider(new GsonJsonProvider())
.mappingProvider(new GsonMappingProvider())
.build());
JsonArray responseData = parseContext.parse(validResponseData).read("$.[*].[*]", RESPONSE_TYPE);
我被困在这之后,如何将其转换为List here
List<ClassName> classNames = GSON.fromJson(responseData, new TypeRef<List<ClassName>>(){}.getType());
还有其他方法可以达到这个目的吗?我甚至不关心有一个中间的java pojo,如果我直接从json中获取json schema中指定的结构,我很好。