来自MongoDB的数据如下所示:
> db.foo.findOne()
[
{
"_id" : "some string",
"bar" : [
[
14960265,
0.5454545454545454
],
[
30680,
0.36363636363636365
],
[
12852625,
0.09090909090909091
]
],
}
]bar属性包含一个未知大小的列表,其中的每个项都是长度为2的列表,其中包含Int和Double。在Scala中,我把它表示为List(Int,Double)。
我将如何为该结构编写与Salat一起使用的模型?
Salat不做元组,所以我试过:
case class FooEntry(a: Int, b: Double)
case class Foo(_id: String, bar: List[FooEntry])但得到了:
java.lang.IllegalArgumentException: BasicBSONList只能使用数字键,而不是:a
也曾尝试过:
case class Foo(_id: String, sps: List[Any])但得到了:
java.lang.ClassCastException:不能将com.mongodb.BasicDBList转换为scala.collection.immutable.List
显然,数据可以以更好的形式存储,使用的是一个对象而不是长度-两个数组。但是,考虑到这就是我所拥有的,是否有一个好的方法来使用Salat来反序列化它?谢谢!
发布于 2013-02-14 13:57:52
这里是Salat项目的负责人。无论您的数据结构如何,都需要为列表指定一个类型。Salat还不支持元组,虽然Salat支持多态集合(这需要类型提示!),但它不支持像您这样的异构类型列表。
你能不能重组你的数据,使数组成员不是列表而是
[
{x: 123, y: 123.0},
{x: 456, y: 456.0}
]然后你可以用
case class Bar(x: Long, y: Double)
case class Foo(_id: String, sps: List[Bar])或者,考虑使用Miles Sabin的无形状项目或Alois Cochard的Sherpa项目来反序列化您的数据。
https://stackoverflow.com/questions/14871521
复制相似问题