2011-05-02 3 views
0

각 객체에는 다른 객체와 배열이 포함될 수있는 여러 개의 JSON 객체가있는 파일이 있습니다.Jackson을 사용하여 개별 JSON 이벤트 읽기

나는이를 선호하지 않게 잭슨 라이브러리를 사용하여 최상위 객체 분리를 유지하는 데이터 구조로 역 직렬화하고자한다. 배열 또는 Java HashMap<String, String> 개체의 목록입니다. 여기서 각 HashMap에는 파일의 단일 최상위 JSON 개체의 데이터가 포함됩니다.

내가 본 것을에서

, 당신은 잭슨에서 HashMap<String, String>를 얻을 수 없다, 그래서 HashMap<String, Object> 참아 있습니다

List<HashMap<String,Object>> values = new ObjectMapper().readValue(new BufferedReader(new FileReader(path)), new TypeReference<List<HashMap<String, Object>>>() {}); 

예상대로, 그러나 나는 작품 위의 직렬화를 얻을 수있는 모든 파일 데이터 및 단일 JSON 객체의 데이터가 아닙니다.

아이디어가 있으십니까?

감사합니다.

Reader inputReader = new BufferedReader(new FileReader(filename)); 

int readEvents = 0; 

JsonFactory factory = new JsonFactory(); 

JsonParser parser = factory.createJsonParser(inputReader); 

JsonToken token = null; 
ObjectMapper mapper = new ObjectMapper(); 
HashMap<String,Object> attributes = null; 
ArrayList<Map<String,Object>> matchedEvents = new ArrayList<Map<String,Object>>(); 

try 
{ 
    while ((token=parser.nextToken()) != null) 
    { 
     if (token == JsonToken.START_OBJECT) 
     { 
      readEvents++; 
      attributes = mapper.readValue(parser, 
        new TypeReference<HashMap<String, Object>>() {}); 
      if (attributes != null) 
      { 
       matchedEvents.add(attributes); 
      } 
     } 
    } 
} 
catch (Exception e) 
{ 
    e.printStackTrace(); 
} 

System.out.println("Read " + readEvents + " events"); 

ArrayList에 배치 HashMap<String, Object> 각 객체가 하나의 (최상위) JSON 이벤트에 해당

+0

사용하려는 것과 일치하는 간단한 JSON 예제는 무엇입니까? –

답변

0

노력이 상당히 후, 여기에 작동하는 것 같다 간단한 방법입니다.

readValue() 메서드는 분명히 Map(String, String) 개체를 반환하지 않습니다.

+0

"readValue() 메소드는 분명히 Map (String, String) 객체를 반환하지 않습니다." - 입력 된 JSON과 readValue에 지정된 대상 유형이 모두 해당 구조를 제공하는 경우 readValue 메소드는 실제로 Map 인스턴스를 반환합니다. 귀하의 JSON 구조는 문자열/문자열의지도가 아니라 문자열/객체의지도가 아니라는 것을 짐작할 수 있습니다. 잭슨이 문자열/문자열의지도라고 설득하려고 시도하고 있지만 그렇지 않습니다. –

관련 문제