首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有弹簧批处理的Json数组读取器文件

带有弹簧批处理的Json数组读取器文件
EN

Stack Overflow用户
提问于 2014-08-29 22:15:25
回答 2查看 5K关注 0票数 2

我有一个文件作为输入,其中包含一个json:

代码语言:javascript
复制
[ {
  ...,
  ...
  },
  {
  ...,
  ...
  },
  {
  ...,
  ...
  }
]

我想阅读它而不破坏弹簧批次原理(与FlatFileReader或XmlReader一样)

我没有找到任何方法去做,读者已经实现了春季批处理。

实现这个阅读器的最佳方法是什么?

提前谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-08-29 22:32:28

假设您想对StaxEventItemReader建模,因为您希望将JSON数组的每一项读入Spring中的一个项,下面是我的建议:

  • RecordSeparatorPolicy -您将需要实现您自己的RecordSepartorPolicy,它指示您是否已完成完整项目的阅读。您还可以使用RecordSeparatoerPolicy#postProcess来清理您需要处理的开头和结尾的[]以及逗号分隔符。
  • LineTokenizer -然后您将希望创建解析JSON的自己的LineTokenzier。我今天正在为一个项目编写一个代码,这样您就可以使用该代码作为开始(请考虑它未经测试): 公共类JsonLineTokenizer实现LineTokenizer {@覆盖公共FieldSet令牌(字符串行){ List令牌=新ArrayList<>();尝试{ HashMap结果=新ObjectMapper().readValue(行,HashMap.class);tokens.add((字符串) result.get("field1"));tokens.add((字符串)result.get(“field2”));} catch (IOException e) {抛出新RuntimeException(“无法解析json:”+RuntimeException);}返回新DefaultFieldSet(tokens.toArray(新字符串)、{"field1“、"field2"});}
票数 1
EN

Stack Overflow用户

发布于 2015-06-09 09:23:15

这是我从建议和默认实现开始编写的记录分隔策略。我对读取记录使用了一个内部的纯字符串表示,但是我发现使用codehaus对象解析JSON非常简单。

代码语言:javascript
复制
public class JsonRecordSeparatorPolicy extends SimpleRecordSeparatorPolicy {

/**
 * True if the line can be parsed to a JSON object.
 * 
 * @see RecordSeparatorPolicy#isEndOfRecord(String)
 */
@Override
public boolean isEndOfRecord(String line) {
    return StringUtils.countOccurrencesOf(line, "{") == StringUtils.countOccurrencesOf(line, "}")
            && (line.trim().endsWith("}") || line.trim().endsWith(",") || line.trim().endsWith("]") );
}

@Override
public String postProcess(String record) {
    if(record.startsWith("[")) record = record.substring(1);
    if(record.endsWith("]")) record = record.substring(0, record.length()-1);
    if(record.endsWith(",")) record = record.substring(0, record.length()-1);
    return super.postProcess(record);
}

}

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25576974

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档