2017-12-26 20 views
0

10000 개가 넘는 행이있는 json 파일이 있습니다. 내가 모든 행을 필터링 할일부 (값) 인 필드 값을 기준으로 json-map 개체 필터링

{"id":1,"child_id":1822925634,"parent_id":-1,"name":"victor"} 
{"id":2,"child_id":1266710134,"parent_id":25,"name":"victor"} 
{"id":3,"child_id":572534000,"parent_id":-1,"name":"simone"} 
. 
. 
. 
{"id":10575,"child_id":572534781,"parent_id":135,"name":"victor"} 

-1에 동일한을 PARENT_ID : 당신은 아래의 데이터 형식을 볼 수 있습니다.

먼저 내 코드는 파일 내용을 읽은 다음 줄 바꿈으로 분할합니다.

val file = new File("./myFile.json") 
val jsonContent = FileUtils.readFileToString(file) 
JSON.globalNumberParser = {input : String => Integer.parseInt(input)} 
val jsonArray = jsonContent.split("\n").map(x=>JSON.parseFull(x).get.asInstanceOf[Map[String,String]]) 

지금까지 필자는 4 개의 키 - 값 쌍을 가진 맵 객체를 사용했습니다 (모든 것이 여기까지 괜찮습니다). 조금 디버그하려면 온도"Some (-1)"을 예상대로 반환합니다.

val temp = jsonArray(2).get("parent_id") 

는 지금, 나는 PARENT_ID

val selectedRows = jsonArray.filter(_.get("parent_id")=="-1").map(_.get("name")) 

에 따라 jsonArray를 필터링 할 그러나 빈지도 개체를 반환합니다. 문제는 방정식이 만족스럽지 않다는 것입니다. 나는 ("PARENT_ID") == 시도 "-1" 또는 "일부는 (-1)" 또는 일부 ("- 1")

답변

1

Map.get가 반환하는 Option 및 따라서 귀하의 표현 _.get("parent_id")=="-1"가 항상 false.

_.get("parent_id") == Some(-1)으로 변환해야합니다.

+0

감사합니다. 정수 값을 가져올 것으로 예상하지 않았습니다. –