Scala读取文件并在列表中加载为json对象

时间:2016-08-01 22:04:00

标签: json mongodb scala playframework

我正在尝试使用Scala读取csv文件并将输出存储为Json(list(json.obj))列表。

这是我的代码:

def index = Action {
  Logger.info("Application startup...")
  var posts = List(Json.obj())
  var finalPost = List(Json.obj())
  val bufferedSource = Source.fromFile("/Users/manujkathuria/a.csv")
  for (line <- bufferedSource.getLines) {
    val cols = line.split(",").map(_.trim)
    posts = List(
      Json.obj(
        "name" -> cols(0),
        "age" -> cols(1),
        "job" -> cols(2)
      ))
    finalPost +: posts
  }
  bufferedSource.close
}

所以我的目标是存储我从a.csv文件中读取的数据并将其加载到jsonObjects列表中,稍后我将用它来加载到MongoDB中。

2 个答案:

答案 0 :(得分:0)

你可以尽量避免使用变量。我认为更好的解决方案可能是

def index = Action {
  Logger.info("Application startup...")
  val json = parse("/Users/manujkathuria/a.csv")
  ... 
}
def parse(file:String): List[Json] = {
  val bufferedSource = io.Source.fromFile(file)
  try {
    bufferedSource.getLines().map(line => {
      val cols = line.split(",").map(_.trim)
      Json.obj(
        "name" -> cols(0),
        "age" -> cols(1),
        "job" -> cols(2)
      )
    }).toList
  } finally
    bufferedSource.close
}

答案 1 :(得分:0)

@Mikel现在正在工作。谢谢你的建议。

ObjectMapper mapper = new ObjectMapper();
String jsonStr = "{"hdd_errors":18446744073709552000,"vnet2_tx_packets":86647,"vnet2_rx":19753895921,"vda_write":2873672704,"hdd_read":180702,"vnet2_tx":15722682,"vnet2_rx_drop":691,"vnet2_rx_errors":0,"memory-swap_in":0,"hdd_read_req":78,"vnet2_tx_drop":0,"vnet2_tx_errors":0,"hdd_write":0,"memory":2097152,"memory-rss":1598552,"cpu0_time":48668260000000,"vda_read":251817472,"vda_write_req":267405,"vnet2_rx_packets":225351039,"memory-actual":2097152,"hdd_write_req":0,"vda_read_req":16222,"vda_errors":18446744073709552000}";

//JSON from String to Object
HddError obj = mapper.readValue(jsonStr, HddError.class);