首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何为混合类型嵌套列表指定salat模型?

如何为混合类型嵌套列表指定salat模型?
EN

Stack Overflow用户
提问于 2013-02-14 09:26:34
回答 1查看 594关注 0票数 0

来自MongoDB的数据如下所示:

代码语言:javascript
复制
> 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不做元组,所以我试过:

代码语言:javascript
复制
case class FooEntry(a: Int, b: Double)
case class Foo(_id: String, bar: List[FooEntry])

但得到了:

java.lang.IllegalArgumentException: BasicBSONList只能使用数字键,而不是:a

也曾尝试过:

代码语言:javascript
复制
case class Foo(_id: String, sps: List[Any])

但得到了:

java.lang.ClassCastException:不能将com.mongodb.BasicDBList转换为scala.collection.immutable.List

显然,数据可以以更好的形式存储,使用的是一个对象而不是长度-两个数组。但是,考虑到这就是我所拥有的,是否有一个好的方法来使用Salat来反序列化它?谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-14 13:57:52

这里是Salat项目的负责人。无论您的数据结构如何,都需要为列表指定一个类型。Salat还不支持元组,虽然Salat支持多态集合(这需要类型提示!),但它不支持像您这样的异构类型列表。

你能不能重组你的数据,使数组成员不是列表而是

代码语言:javascript
复制
[
  {x: 123, y: 123.0}, 
  {x: 456, y: 456.0}
]

然后你可以用

代码语言:javascript
复制
case class Bar(x: Long, y: Double)
case class Foo(_id: String, sps: List[Bar])

或者,考虑使用Miles Sabin的无形状项目或Alois Cochard的Sherpa项目来反序列化您的数据。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14871521

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档