Мое требование - преобразовать две строки и создать файл JSON (с использованием JSON-спрея) и сохранить его в каталоге ресурсов.
одна входная строка содержит идентификатор, а другие входные строки содержат счет и тему
id = "alpha1"
inputstring = "science 30 math 24"
Ожидаемый вывод JSON:
{“ContentID”: “alpha1”,
“Topics”: [
{"Score" : 30, "TopicID" : "Science" },
{ "Score" : 24, "TopicID" : "math”}
]
}
. Ниже приведен подход, который я выбрал, и застрял на последнем месте
Определите класс дела
case class Topic(Score: String, TopicID: String)
case class Model(contentID: String, topic: Array[Topic])
implicit val topicJsonFormat: RootJsonFormat[Topic] = jsonFormat2(Topic)
implicit val modelJsonFormat: RootJsonFormat[Model] = jsonFormat2(Model)
Синтаксический анализ входной строки
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)
И, наконец, переход через результат
paired foreach {case (x,y) =>
val tClass = Topic(x, y)
val mClassJsonString = Topic(x, y).toJson.prettyPrint
out1.write(mClassJsonString.toString)
}
И файл генерируется как
{"Score" : 30, "TopicID" : "Science" }
{ "Score" : 24, "TopicID" : "math”}
Проблема в том, что яневозможно добавить contentID
, как указано выше.Добавление ContentId внутри foreach делает contentID
добавленным несколько раз.