2012-03-18 3 views
0

Учитывая этот пример кода:Как разобрать json с датой, экспортируемой mongoexport в Scala?

import com.mongodb.util.JSON 
import com.mongodb.casbah.Imports._ 
val json = """{"date" : { "$date" : 1327064009959 }}""" 
val doc = JSON.parse(json) 

я получаю эту ошибку: java.lang.ClassCastException: java.lang.Long не может быть приведен к java.lang.String

Что я могу сделать, чтобы получить это правильно проанализировано в Scala с Casbah?

+0

проверить JSON и подтвердите в http://jsonlint.com/ –

+1

Json действительно. Это $ date, которая вызывает проблемы при разборе в scala. –

+0

Просто заключите секунды в двойные кавычки. '" "" {"date": {"$ date": "1327064009959"}} "" "" и зарегистрировать ошибку против Casbah, которая не поддерживает longs. – nicerobot

ответ

-1

Проверить это опечатка, это действительный JSON, вы должны пройти

var json = ' 
    { 
     "date": { 
      "$date": 1327064009959 
     } 
    }'; 
+0

Вы уверены, что не испортили javascript с помощью scala? Потому что я уверен, что он даже не будет компилироваться в scala, потому что тики используются символами, а не строками: 'val ok = 'x'', и это вызовет ошибку:' val notOk =' notOk''. Следовательно, ваше решение бессмысленно. –

0

Там есть решение, которое я не люблю слишком много, ты:

import com.mongodb.util.JSON 
import com.mongodb.casbah.Imports._ 
import scala.util.matching.Regex 

val json = """{"date" : { "$date" : 1327064009959 }}""" 
val doc = JSON.parse(json) 
var regex = new Regex("""\{ "\$date" : (\d+) \}""", "date") 
val fixed = regex replaceAllIn (json, m => "\"" + (new DateTime(m.group("date").toLong)) + "\"") 
val doc = JSON.parse(fixed).asInstanceOf[DBObject] 
Смежные вопросы