scala 解析json并提取符合要求的数据

 

目的

    从json文件(result.txt 一行一个json)中提取 该json的pid字段 在文件need.txt 中行 // 即 每行json解析后提取pid看在不在need.txt里面

    知识点: 1 scala 文件读写 2 play框架解析json

代码

package ceshi

import java.io.{File, PrintWriter}
import scala.io.source
import play.api.libs.json._
import scala.collection.mutable.ListBuffer

object ExtractData {
  def main(args: Array[String]): Unit = {
    val writer = new PrintWriter(new File("C:/Users/thomas.y/Desktop/tmp./提取结果.txt"))
    // 项目需要的pid
    val needList = Source.fromFile(raw"C:/Users/thomas.y/Desktop/tmp./need.txt").getLines().toList
    println(needList)
    /**
     * name10
     * name1
     */

    // 所有pid数据 文本每行都是要给json 
    val jsonlines = Source.fromFile(raw"C:/Users/thomas.y/Desktop/tmp./result.txt").getLines().toList
    /**
     * {"title":"asdfasf","pid":"name1","value":"1212"}
     * {"title":"dfgyjgxc","pid":"name3","value":"2323"}
     */

    val resList: ListBuffer[String] = ListBuffer()
    // 提取need.txt里面项目需要的pid内容
    jsonlines.foreach(
      x => x match {
        case data: String if needList.contains((Json.parse(data) \ "pid").as[String]) => resList.append(data)
        case _ =>
      }
    )

    resList.sortBy(x => (Json.parse(x) \ "pid").as[String]).foreach(x => writer.write(x + "\n")) // 排序方便阅读

    writer.close() // 不close会丢失缓冲区数据
    // 最终结果样式 提取结果.txt
    /**
     * {"title":"asdfasf","pid":"name1","value":"1212"}
     */
  }

}

 

相关文章

共收录Twitter的14款开源软件,第1页Twitter的Emoji表情 Tw...
Java和Scala中关于==的区别Java:==比较两个变量本身的值,即...
本篇内容主要讲解“Scala怎么使用”,感兴趣的朋友不妨来看看...
这篇文章主要介绍“Scala是一种什么语言”,在日常操作中,相...
这篇文章主要介绍“Scala Trait怎么使用”,在日常操作中,相...
这篇文章主要介绍“Scala类型检查与模式匹配怎么使用”,在日...