将JSON对象动态转换为Scala对象



我正在处理一个用例,我试图构建一个web UI接口(使用react and play框架(,该接口以Json/Json字符串作为输入并返回表示给定Json的Scala对象。

输入:

{
"userId": 1,
"id": 1,
"title": "delectus aut autem",
"completed": false
}

输出:

{SomeObjectName}(1,1,"delectus aut autem", false)

这是我的理解,要从json中获取scala对象,我们需要scala对象类型。例如,我们需要MailServer的类定义,如本例所示

我发现了一个关于如何使用库将json转换为react中的case类的示例:转换json类型。这里的问题是这个库在UI中。如果我在scala中有这样的库,那就太好了,但我找不到。因此,我正在考虑将生成的用例类定义作为字符串从UI发送到后端,然后在后端提取用例类。

几个问题:

  1. 我可以从字符串中提取事例类定义吗?如果是,如何
  2. 我的方向对吗
  3. 有其他方法可以解决这个用例吗

如有任何帮助,我们将不胜感激。请给我指正确的方向。

问题是,即使你有一种方法来创建(或以某种方式推断现有的定义(一个案例类,你也无法真正使用它:

val foo = magicLibrary.readJson(fooJsonString) 

上面的foo是什么类型的?它必须是Any(或者,可能是AnyRef(。即使magicLibrary有一种(神奇的(方法可以从给定的json中构造一个实际的类,也不可能在下游使用该类型,因为它在编译时是未知的。

对这个结果唯一能做的就是打印出来,或者,也许,转换回json。但是您已经有json了,所以这是没有用的。

长话短说,除非我完全误解了你的要求,否则没有这样的图书馆,如果有,它也没有多大用处。

在这种情况下,您可以使用标准json库之一将输入解析为Map[String, Any]。。。这可能有用,也可能不有用,这取决于你实际想要对结果做什么。

更好的是,修改API来处理实际已知的类型。

最新更新