Scalaz树到JSON

Muk*_*uki 5 tree json scala scalaz scalaz7

我目前正在尝试使用Tree该类从数据库查询构建树结构.之后我想将它转换为json对象(使用playframework api).

Tree该类的一些示例或更多文档将是非常棒的.我无法得到我的头drawdrawTree方法,这可能做一个类似的事情.

val tree = ("Root", 100).node(
        ("Category1", 30).leaf,
        ("Category2", 20).node(
          ("Sub1", 15).leaf,
          ("Sub2", 3).leaf,
          ("Sub3", 2).leaf),
        ("Category3", 10).leaf,
        ("Category4", 30).node(
          ("Sub1", 20).leaf,
          ("Sub2", 5).leaf))
Run Code Online (Sandbox Code Playgroud)

这应该会产生这样的json树

{
  "name" : "Root",
  "value" : 100,
  "children" : [
     { 
        "name" : "Category1",
        "value": 30
     },
     {
        "name": "Category2",
        "value": 20,
        "children" : [
             {
                "name" : "Sub1",
               "value" : 15"
             } ....
        ]

  ]
Run Code Online (Sandbox Code Playgroud)

Ben*_*mes 8

Writes为这棵树编写一个实例是很有可能的:

import scalaz.Tree, Tree.Node

implicit def treeWrites: Writes[Tree[(String, Int)]] =
  new Writes[Tree[(String, Int)]] {
    def writes(o: Tree[(String, Int)]) = o match {
      case Node((name, value), children) => Json.obj(
        "name" -> name,
        "value" -> value,
        "children" -> JsArray(children.map(Json.toJson(_)))
      )
    }
  }
Run Code Online (Sandbox Code Playgroud)

这是一个非常简单的实现,并将children为叶子显示一个空数组,但毫无疑问可以通过一些额外的工作来改进.