2016-09-14 3 views
0

Я делаю некоторые HandsOn на ScalaКак конвертировать записи в файл JSON в список в Скале

У меня есть файл с именем JSon simple.json

"employees":[ 
{"firstName":"John", "lastName":"Doe"}, 
{"firstName":"Anna", "lastName":"Smith"}, 
{"firstName":"Peter","lastName":"Jones"} 
] 

Я хочу прочитать этот файл JSon от и сохранить значения этих величин в списке лестницу

Ожидаемый результат:

List("John|Doe", "Anna|Smith", "Peter|Jones") 

Я не ABL е продолжить файл лестницу

package pack1 
import scala.io.Source 
import org.json.simple.JSONObject; 
import org.json.simple.JSONArray; 
import org.json.simple.parser.ParseException; 
import org.json.simple.parser.JSONParser; 
    object ss { 

    def main(args: Array[String]): Unit = {  
    val mySource=Source.fromFile("C:\\inputfiles\\simple.json").getLines().mkString 
    println(mySource) 
    val parser = new JSONParser(); 
    val jArray = parser.parse(mySource); 


} 

} 

Как я исхожу с кодом, чтобы получить ожидаемый результат

+0

См. Http://stackoverflow.com/a/36290229/5344058 –

ответ

1

Использование play-json

если вы используете SBT проекта. Добавьте следующую строку в зависимости от вашего проекта.

build.sbt

libraryDependencies ++= Seq("com.typesafe.play" %% "play-json" % "2.5.4") 

Исходный код

val lines = Source.fromFile("<file-path>").getLines.mkString 
val json = Json.parse("{" + lines.replaceAll("""\n""", "").trim + "}") 
val list = (json \ "employees").as[List[JsValue]] 
      .map(name => s"""${(name \ "firstName").as[String]}|${(name \ "lastName").as[String]}""") 

Scala РЕПЛ

scala> import play.api.libs.json._ 

scala> val str = """ {"employees" : [ {"firstName":"John", "lastName":"Doe"} ] }""".trim 
str: String = {"employees" : [ {"firstName":"John", "lastName":"Doe"} ] } 

scala> val json = Json.parse(str) 
json: play.api.libs.json.JsValue = {"employees":[{"firstName":"John","lastName":"Doe"}]} 

scala> val list = (json \ "employees").as[List[JsValue]].map(name => s"""${(name \ "firstName").as[String]}|${(name \ "lastName").as[String]}""") 
list: List[String] = List(John|Doe) 

Обратите внимание, что ниже строки не является допустимым JSON

val str = """ 
"employees":[ 
       {"firstName":"John", "lastName":"Doe"}, 
       {"firstName":"Anna", "lastName":"Smith"}, 
       {"firstName":"Peter","lastName":"Jones"} 
      ] """.stripMargin 

Это должно быть завернуты внутри { } для Json.parse разобрать правильно.

val validJsonStr = "{" + str + "}" 
Смежные вопросы