coo*_*eze 1 json scala playframework playframework-json
我只是比较如何在java中将对象序列化和反序列化为JSON.
ObjectMapper mapper = new ObjectMapper();
String jsonInString = "{'name' : 'john smith'}";
User user = mapper.readValue(jsonInString, User.class);
使用Playframework和Scala,我必须创建这些读取和写入映射器,它们非常冗长.(参见:https://www.playframework.com/documentation/2.5.x/ScalaJsonHttp)
为什么它不能像java w/Jackson一样"工作"?
我有我的模型,我想简单地读/写然后到JSON.使用Java,我没有任何样板代码可供编写.
来自https://www.playframework.com/documentation/2.5.x/ScalaJsonInception
我们收到了一些人的抱怨,他们认为编写Reads [他们的类]并不酷,因为通常像Jackson或Gson这样的Java JSON框架在没有写任何东西的情况下做到了.我们认为Play2.1 JSON序列化器/反序列化器是:
- 完全类型安全,
- 完全编译,
- 在运行时使用内省/反射没有执行任何操作.
在ObjectMapper杰克逊是没有这些东西.它在很大程度上依赖于反射,因此如果您通过混淆器提供类文件,它可能会完全破坏.即使你不这样做,也不能保证在编译时你试图反序列化的类实际上是可反序列化的.
Scala的部分内容是它提供了非常强大的编译时保证.隐含(例如类似于类Reads和类Writes)因素,尽管它们带有一些样板/开销.
该游戏开发者听到您的投诉,但它是非常不可能的Reads,并Writes会自行消失.相反,他们试图通过提供一个找到这样的代码的宏来减少冗长:
implicit val personReads = Json.reads[Person]
并根据Person构造函数解释它:
implicit val personReads = (
  (__ \ 'name).read[String] and
  (__ \ 'age).read[Int] and
  (__ \ 'lovesChocolate).read[Boolean]
)(Person)
| 归档时间: | 
 | 
| 查看次数: | 124 次 | 
| 最近记录: |