使用JsonSchema从JSON中提取少量属性

时间:2018-02-04 05:48:59

标签: java jsonschema jsonschema2pojo

我正在尝试编写一个工具,它将从用户那里获取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中指定的结构,我很好。

0 个答案:

没有答案