需要在scala中将字符串转换为Json对象

时间:2019-05-21 13:30:10

标签: json scala

我正在尝试使用JSON Spray将字符串转换为JSON。但是我在scala中是一个新手,编写代码时遇到了麻烦。我的输入文件是一个字符串,可能包含更多元素。

示例输入字符串

12 rob 133 millan 

期望的JSON文件在下面

[
  {
    "M": {
      "Score": {
        "N": "12"
      },
      "TopicID": {
        "S": "rob"
      }
    }
  },
  {
    "M": {
      "Score": {
        "N": "133"
      },
      "TopicID": {
        "S": "milan"
      }
    }
  }

任何有关代码方法的建议也会有所帮助。 请提出建议。

1 个答案:

答案 0 :(得分:5)

关于创建json的信息:

首先,您需要定义案例类:

case class SClass(S: string)
case class NClass(N: string)
case class MClass(Score: NClass, TopicID: SClass)

然后:

implicit val mclassFormat = jsonFormat2(MClass)
implicit val nclassFormat = jsonFormat(NClass)
implicit val sclassFormat = jsonFormat(SClass)

// serialize the json (hardcoded values)
val mClass = MClass(NClass(12.toString(), SClass("rob"))
val mClassJsonString = mClass.toJson.prettyPrint

关于解析输入:

 val input = "12 rob 13 bla"

 val a = input.split(" ").zipWithIndex.collect{case(v,i) if (i % 2 == 0) => 
 (v,i)}.map(_._1)
 val b = input.split(" ").zipWithIndex.collect{case(v,i) if (i % 2 != 0) => 
 (v,i)}.map(_._1)
 val result = a.zip(b) // [(12,rob),(13,bla)]

现在您可以像这样遍历结果:

 result.foreach{case (x,y) => 
      val mClass = MClass(NClass(x.toString(), SClass(y))
      val mClassJsonString = mClass.toJson.prettyPrint
 }