首页 > 解决方案 > 需要在scala中将字符串转换为Json对象

问题描述

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

示例输入字符串

12 rob 133 millan 

预期的 JSON 文件如下

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

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

标签: jsonscala

解决方案


关于创建 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
 }

推荐阅读