我正在尝试使用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中。
答案 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);