2013-06-27 2 views
2

json에서 가져온 결과 세트가 매우 깁니다. json의 각 데이터 행은 매우 구체적인 "열"순서를 반환하며,이를 신속하게 반복하고 싶습니다. 각 데이터 조각을 처리하기 위해 키를 확인/일치시키는 오버 헤드를 피하는 것이 좋습니다. 불행하게도 scala.util.parsing.json은 이러한 열을 Map 객체에 넣습니다. 반복되는 순서는 Map을 반복 할 때 무작위이며 반드시 JSON 결과의 열 순서를 미러링하지는 않습니다. 파서가 JSON 열의 순서를 적용하도록 만드는 방법이 있습니까? 한 가지 생각은 파서에게 LinkedHashMap 또는 ListMap을 사용하여 객체를 생성하도록 지시하는 방법이있는 경우입니다. 수업을 연장하거나 다른 특성을 추가함으로써 이것이 가능한가? 다른 대안이 있습니까?JSON 결과의 순서 적용

+1

질문에 "오버 헤드를 피하기 위해 선호합니다"라는 단어가 포함되어 있으면 'scala.util.parsing.json'을 피하십시오. –

답변

1

나는 json4s와 같은 것을 시도해 볼 것을 고려할 것이다.

JObject 유형이 필드를 정렬 한 것처럼 보입니다. 당신이 주문을해야하는 이유 그렇지 않으면

https://github.com/json4s/json4s

물어 것인가? 키로 map.get을 항상 사용할 수 있습니다.

+0

json4s는 모든 필드가 문자열로 구문 분석되도록하는 방법을 찾아야하지만 유망한 것처럼 보입니다 (예 : 긴 문자열이 숫자로 해석되지 않음) –

+0

매끄러운 DB 프레임 워크를 사용하고 있습니다. 준비된 진술에이 값들을 덤핑하고있다. 준비된 문을 채우는 것은 숫자 색인을 사용하여 각 변수 매핑을 처리합니다. 각각의 인덱스에 대한 각 키 이름에 대한 룩업 테이블을 만들 수는 있지만 이러한 테이블을 관리하는 오버 헤드와 각 결과 행에서 수행 할 수있는 처리 능력을 다루지는 않을 것입니다. –

+0

문자열 필드는 json에서 큰 따옴표로 묶습니다. json4s는 정확한 유형을 돌려 줄 것입니다. – JasonG

2

키/값 쌍의 순서에 의존하지 않는 것이 좋습니다.

목적은 이름/값 쌍들의 순서화 된 집합이다 JSON 개체 defined가 같다.

주문을 신뢰하면 어려운 버그와 코드 비 호환성이 발생할 가능성이 큽니다. 속도에 대한 거래 정확성은 항상 나쁜 거래입니다.

대신에 빠르고 정확한 구문 분석기를 찾는 것이 좋습니다. 전에 Jackson을 사용했는데, 이는 매우 빠르며 Scala에서도 잘 사용할 수 있습니다. annotate 당신의 임의의 클래스이고 Jackson은 JSON을 클래스의 인스턴스로 구문 분석합니다. 그런 다음 이러한 인스턴스를 네이티브 Java/Scala 객체로 처리 할 수 ​​있습니다.이 객체는 매우 빠르고 강력합니다.

+0

잭슨 (Jackson)은 자바 기반 라이브러리입니다. 놀이에 사용 된 Jerkson이라는 래퍼가 있습니다! 한동안 프레임 워크. 프로젝트가 포기됨에 따라 다른 도서관이 인기를 얻고 있습니다. Json4s는 Jackson이 지원할 수 있으므로 scala에서 사용하는 것이 좋습니다. – JasonG

+0

jackson에는 자바 라이브러리가 스칼라 객체와 함께 작동하도록하는 스칼라 모듈도 있습니다. -> https://github.com/FasterXML/jackson-module-scala –