代码之家  ›  专栏  ›  技术社区  ›  Don Hosek

新的spring json阅读器中是否有bug,或者我做错了什么?

  •  0
  • Don Hosek  · 技术社区  · 6 年前

    我配置了以下读卡器:

    @Configuration
    public class ReaderConfig {
        @Bean
        public JsonItemReader<String> jsonItemReader(Resource resource) {
            return new JsonItemReaderBuilder<String>()
                    .jsonObjectReader(new JacksonJsonObjectReader<>(String.class))
                    .resource(resource)
                    .name("jsonItemReader")
                    .build();
        }
    }
    

    通过这个测试:

    @Test
    public void jsonItemReaderTest() throws Exception {
        ReaderConfig config = new ReaderConfig();
    
        Resource sampleJsonResource = new ClassPathResource("sampleResponse.json");
    
        JsonItemReader<String> reader = config.jsonItemReader(sampleJsonResource);
    
        reader.open(new ExecutionContext());
    
        String item = null;
        List<String> results = new ArrayList<>();
        do {
            item = reader.read();
            System.err.println(item);
            if (!Objects.isNull(item)) {
                results.add(item);
            }
        } while (item != null);
    
        reader.close();
    
        assertThat(results).hasSize(7);
    }
    

    以及以下json:

    [
      "A",
      "B",
      "C",
      "D",
      "E",
      "F",
      "G"
    ]
    

    但是,读取器返回空值。尝试使用调试器进行跟踪时,我得到的结果是解析器返回它在数组开头有一个字符串,并且期望应该有一个左大括号。有什么线索吗?这似乎是一个如此明显的用例,以至于我很惊讶它没有被代码覆盖。

    1 回复  |  直到 6 年前
        1
  •  2
  •   Mahmoud Ben Hassine    6 年前

    这个 JsonItemReader 用于读取JSON对象数组(请参见 Javadoc )根据 http://www.json.org ,json对象定义如下:

    对象是一组无序的名称/值对。对象以{(左大括号)开头,以}(右大括号)结尾。每个名称后跟:(冒号),名称/值对之间用(逗号)分隔。

    因此根据这个定义,json输入不是json对象数组。

    希望这有帮助。