【问题标题】:Is there a bug in the new Spring JSON reader or am I doing something wrong?新的 Spring JSON 阅读器中是否存在错误或者我做错了什么?
【发布时间】:2018-11-02 19:26:37
【问题描述】:

我已经配置了以下阅读器:

@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"
]

但是,阅读器返回 null。尝试使用调试器进行跟踪,我得到的是解析器返回它在数组的开头有一个字符串,并且期望应该有一个左大括号。对此有任何指示吗?这似乎是一个如此明显的用例,我很惊讶它没有被代码覆盖。

【问题讨论】:

    标签: json spring-batch


    【解决方案1】:

    JsonItemReader 旨在读取 JSON 对象数组(参见其Javadoc)。根据http://www.json.org,一个JSON对象定义如下:

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

    所以根据这个定义,你的 JSON 输入不是 JSON 对象的数组。

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-06-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-17
      相关资源
      最近更新 更多