2017-04-22 1 views
0

MongoCursor에서 JsonNode로 작업 할 때 문자열을 파싱 할 때 문제가 있습니다. MongoCursor가 반환 한 Json을 Spring SQL POJO로 작업하도록하려고 했으므로 SQL 데이터베이스에 삽입 할 수 있습니다. 기본적으로 이것은 데이터베이스 변환이며, SQL 끝은 히스토리 저장을위한 것입니다. 나는 필드가 POJO와 약간 다르기 때문에 스프링의 몽고를 사용하지 않았다. (MongoDB와 SQL은 스키마가 약간 다르다)Spring & MongoCursor & Jackson JsonNode (데이터베이스 변환)

현재 패턴 매처/문자열 분할을 사용하고 HashMap으로 대체 할 수있다. 각 필드의 키와 값 쌍을 얻은 다음이를 내 봄 POJO에 삽입하십시오. 잭슨의 POJO를 사용할 수도 있지만 jsonNode를 더 나은 솔루션으로 사용하라는 안내를 받았습니다. 내가 놓친 게있을거야. 잭슨의 문서에서

하는 "JSON"문자열의 형식은 다음과 같습니다

{\ "컬러 \"을 \ "BMW \": "블랙 \", \ "유형 \"\}

그러나 MongoCursor가 나를 돌려주는 것의 경우는 아닙니다. 커서, 내가 좋아하는 뭔가를 얻을 :

문서 {{_ ID = G8HQW9123, 사용자 = 테스트}} I가 감소하는 문자열 패턴 매처와 완전히 대체를 사용

:

{_id : G8G8HQW9123, 사용자 : 테스트} 그러나

, 잭슨의 슬래시 및 따옴표는 저를 던지고 그것을 구문 분석 할 수 없습니다. 내가 놓친 게 있니? 또는 실제로 슬래시를 추가해야합니까? & 따옴표를 사용하면 코드가 작동합니다. 현재 큰 따옴표를 요청하는 구문 분석 오류가 발생합니다.

답변

0

여기 뭔가가 빠져 있다고 생각합니다.

MongoCursorString이 아니라 Document 개체를 반환합니다.

Document.toString()으로 전화를 걸어 String 결과로 작업하고 있습니까?

String 파싱을 전혀 수행 할 필요가 없습니다. Document Object를 Mongo에서 가져 와서 getter 함수를 호출하여 필요한 필드를 가져올 수 있어야합니다.이 필드는 데이터 유형 (문자열, 숫자, 부울 및 날짜)을 보존합니다 (예 : 모두 선택). BsonDocument 클래스 Javadoc과의 기능 : https://mongodb.github.io/mongo-java-driver/3.4/javadoc/org/bson/BsonDocument.html

+0

Java IDE에서 MongoCursor를 사용하라고했습니다. 어떤 getter 함수도 없기 때문에, 출력하기 위해 tostring을 사용해야했습니다. 나는 월요일에 그 컴퓨터에 도착하면 Document 객체를 볼 것이다. 힌트를 주셔서 감사합니다. – Slodin

0

당신은 Document에서 JSON에서 JSONNode을 만들어야합니다.

뭔가

ObjectMapper mapper = new ObjectMapper(); 
ObjectReader reader = mapper.reader(JsonNode.class); 
//document from Mongo Cursor 
JsonNode node = reader.readValue(document.toJson()); 

또는

당신이 MongoDB를에 원시 JSON 문자열을 저장해야 원시 JSON 문자열에서 JSONNode을 만들려면

몽고 DB 전류 출력은 키를 사용하여 문서입니다 JSON이다 값 쌍.

여기에서 문서에서 문자열로 변환하여 JSONNode으로 트릭을 놓치 셨습니다.

또는

문서는지도의 구현입니다 그래서 당신은 JSON 노드 부분을 생략하고 문서에서지도를 추출 및 SQL DB에 직접 저장할 수 있습니다 될 수있다.

첫 번째 해결 방법이 필요하다고 생각하지만 위의 설정 중 하나를 사용하여 설정을 조정할 수 있습니다.

+0

Java IDE에서 MongoCursor를 사용하라고했습니다. 어떤 getter 함수도 없기 때문에, 출력하기 위해 tostring을 사용해야했습니다. 나는 월요일에 그 컴퓨터에 도착하면 Document 객체를 볼 것이다. 힌트를 주셔서 감사합니다. – Slodin

+0

당신은 천만에요. 네, 몽고 쿠르를 반복해야합니다. 'while (cursor.hasNext())와 같은 것 { \t \t Document document = cursor.next(); \t} – Veeram

+0

타입이없는 MongoCursor를 선언했기 때문에 jsonnode 문서를 놓쳤습니다. 이제 MongoCursor 이 작동합니다 ... 이제 @Alex BSON 문서를 읽습니다. 당신이 올바른 동안 나는 그에게 도움이되는 링크를 그에게 주어야한다. – Slodin