복붙노트

[SPRING] spring 배치가있는 Json Array 판독기 파일

SPRING

spring 배치가있는 Json Array 판독기 파일

json 배열을 포함하는 파일을 입력으로 있습니다.

[ {
  ...,
  ...
  },
  {
  ...,
  ...
  },
  {
  ...,
  ...
  }
]

플랫 폼 파일러 (FlatFileReader) 나 XmlReader (XmlReader)와 같은 방식으로 스프링 배치 원칙을 위반하지 않고 읽고 싶습니다.

독자들이 이미 스프링 배치로 구현 한 방법은 찾지 못했습니다.

이 독자를 구현하는 가장 좋은 방법은 무엇입니까?

미리 감사드립니다.

해결법

  1. ==============================

    1.스프링 배치 (Spring Batch)에서 JSON 배열의 각 항목을 항목으로 읽고 싶다는 점에서 StaxEventItemReader를 모델링한다고 가정하면 다음과 같이 추천한다.

    스프링 배치 (Spring Batch)에서 JSON 배열의 각 항목을 항목으로 읽고 싶다는 점에서 StaxEventItemReader를 모델링한다고 가정하면 다음과 같이 추천한다.

  2. ==============================

    2.이것은 제안서와 기본 구현에서 시작하여 작성한 레코드 분리 기호 정책입니다. 내가 읽기 레코드에 대한 내부 일반 문자열 표현을 사용하지만, 나는 codehaus jettison JSON 개체와 JSON을 구문 분석하는 매우 간단한 발견.

    이것은 제안서와 기본 구현에서 시작하여 작성한 레코드 분리 기호 정책입니다. 내가 읽기 레코드에 대한 내부 일반 문자열 표현을 사용하지만, 나는 codehaus jettison JSON 개체와 JSON을 구문 분석하는 매우 간단한 발견.

    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);
    }
    

    }

  3. from https://stackoverflow.com/questions/25576974/json-array-reader-file-with-spring-batch by cc-by-sa and MIT license