YAML/JSONを中間のスカラオブジェクト形式に変換できます。そのような何か:
scala> import net.jcazevedo.moultingyaml.DefaultYamlProtocol._
import net.jcazevedo.moultingyaml.DefaultYamlProtocol._
scala> import net.jcazevedo.moultingyaml._
import net.jcazevedo.moultingyaml._
scala> import spray.json.DefaultJsonProtocol._
import spray.json.DefaultJsonProtocol._
scala> import spray.json._
import spray.json._
scala> val jsonStr = "[1,2,3]"
jsonStr: String = [1,2,3]
scala> val jsonAst = jsonStr.parseJson
jsonAst: spray.json.JsValue = [1,2,3]
scala> val yamlAst = jsonAst.convertTo[List[Int]](spray.json.DefaultJsonProtocol.listFormat).toYaml(net.jcazevedo.moultingyaml.DefaultYamlProtocol.listFormat)
yamlAst: net.jcazevedo.moultingyaml.YamlValue = YamlArray(Vector(YamlNumber(1), YamlNumber(2), YamlNumber(3)))
scala> val yamlStr = yamlAst.prettyPrint
yamlStr: String =
"- 1
- 2
- 3
"
scala> val recoveredJsonAst = yamlAst.convertTo[List[Int]](net.jcazevedo.moultingyaml.DefaultYamlProtocol.listFormat).toJson(spray.json.DefaultJsonProtocol.listFormat)
recoveredJsonAst: spray.json.JsValue = [1,2,3]
scala> val recoveredJsonStr = recoveredJsonAst.prettyPrint
recoveredJsonStr: String = [1, 2, 3]
ここでYAML ASTは、ドメインオブジェクトList[Int]
にして、JSON ASTおよびその逆に変換されます。あなたはASTの間で直接変換を行うことができますが、あなた自身で書く必要があります。
YAMLライブラリはおなじみのJSONライブラリインターフェイスを模倣していますが、暗黙のうちに対処する方がより複雑になるのはいいことです。さらにconvertTo
のようなメソッドは、そのために解決するのが難しいです。あまり競合がある場合に曖昧になっlistFormat
などの輸入など
少しクリーナー:
scala> case class Test(v: Int)
defined class Test
scala> import net.jcazevedo.moultingyaml.DefaultYamlProtocol._
import net.jcazevedo.moultingyaml.DefaultYamlProtocol._
scala> import net.jcazevedo.moultingyaml._
import net.jcazevedo.moultingyaml._
scala> import spray.json.DefaultJsonProtocol._
import spray.json.DefaultJsonProtocol._
scala> import spray.json._
import spray.json._
scala> implicit val TestAsJson = jsonFormat1(Test)
TestAsJson: spray.json.RootJsonFormat[Test] = [email protected]
scala> implicit val TestAsYaml = yamlFormat1(Test)
TestAsYaml: net.jcazevedo.moultingyaml.YamlFormat[Test] = [email protected]
scala> val jsonStr = """{"v":1}"""
jsonStr: String = {"v":1}
scala> val jsonAst = jsonStr.parseJson
jsonAst: spray.json.JsValue = {"v":1}
scala> val yamlAst = jsonAst.convertTo[Test].toYaml
yamlAst: net.jcazevedo.moultingyaml.YamlValue = YamlObject(Map(YamlString(v) -> YamlNumber(1)))
scala> val yamlStr = yamlAst.prettyPrint
yamlStr: String =
"v: 1
"
scala> val recoveredJsonAst = yamlAst.convertTo[Test].toJson
recoveredJsonAst: spray.json.JsValue = {"v":1}
scala> val recoveredJsonStr = recoveredJsonAst.prettyPrint
recoveredJsonStr: String =
{
"v": 1
}
ありがとう@aleksey私は直接ASTからASTソリューションを調理しています。私はそれのためのテストを持っていれば、ここにそれを掲示し、彼らは合格します。 JSONデータをサポートする必要があります。 – akauppi