网上关于scala的json教程比较少,这里写了个基于json4s类库的json示例,简单封装了下spark读取json文件的api

import java.text.SimpleDateFormat
import org.apache.spark.SparkContext
import org.apache.spark.sql.{DataFrame, SQLContext}
import org.json4s.jackson.JsonMethods._
import org.json4s.jackson.Serialization
import org.json4s.{JValue, _}
object JsonUtils {
  implicit val formats = new DefaultFormats {
    override def dateFormatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
  implicit val formats2 = Serialization.formats(ShortTypeHints(List()))
  def jValue2JsonString(obj: JValue): String = {
    compact(render(obj))
  def jValue2PrettyJsonString(obj: JValue): String = {
    pretty(render(obj))
  def jsonObjStr2Map(json: String): Map[String, Any] = {
    org.json4s.jackson.JsonMethods.parse(json, useBigDecimalForDouble = true).values.asInstanceOf[Map[String, Any]]
  def jsonStr2ObjectDemo(): Unit = {
    import org.json4s._
    import org.json4s.jackson.JsonMethods._
    implicit val formats = DefaultFormats // Brings in default date formats etc.
    case class Child(name: String, age: Int, birthdate: Option[java.util.Date])
    case class Address(street: String, city: String)
    case class Person(name: String, address: Address, children: List[Child])
    val json = parse(
         { "name": "joe",
           "address": {
             "street": "Bulevard",
             "city": "Helsinki"
           "children": [
               "name": "Mary",
               "age": 5,
               "birthdate": "2004-09-04T18:06:22Z"
               "name": "Mazy",
               "age": 3
      """)
    println(json.extract[Person].name)
  //spark json///
  def sparkReadFromJsonFile2DF(sc: SparkContext, jsonFilePath: String): DataFrame = {
    val sqlContext = new SQLContext(sc);
    val df = sqlContext.read.format("json").load(jsonFilePath);
  def sparkReadFromJsonFileFilter2DF(sc: SparkContext, jsonFilePath: String): DataFrame = {
    val sqlContext = new SQLContext(sc);
    val df = sqlContext.jsonFile(jsonFilePath).registerTempTable("jsonTable")
    val jsonQuery = sqlContext.sql("select * from jsonTable")
    jsonQuery.printSchema
    jsonQuery.queryExecution
    jsonQuery
  ///test
  def main(args: Array[String]): Unit = {
    tmp01()
  def tmp01() = {
    import org.json4s._
    import org.json4s.jackson.JsonMethods._
    //    parse("""{"numbers":[1,2,3,4]}""").values
    //    parse("""{"name":"Toy","price":35.35}""", useBigDecimalForDouble = true)
    val json2 = parse(
           "name": "joe",
           "addresses": {
             "address1": {
               "street": "Bulevard",
               "city": "Helsinki"
             "address2": {
               "street": "Soho",
               "city": "London"
         }""")
    val json = parse(
         { "name": "joe",
           "children": [
               "name": "Mary",
               "age": 5
               "name": "Mazy",
               "age": 3
      """)
    for (JArray(child) <- json) {
      println(child)
    for {
      JObject(child) <- json
      JField("age", JInt(age)) <- child
    } yield age
    for {
      JObject(child) <- json
      JField("name", JString(name)) <- child
      JField("age", JInt(age)) <- child
      if age > 4
    } yield (name, age)
  def tmp02() = {
    //    val json =
    //      ("person" ->
    //        ("name" -> "Joe") ~
    //          ("age" -> 35) ~
    //          ("spouse" ->
    //            ("person" ->
    //              ("name" -> "Marilyn") ~
    //                ("age" -> 33)
    //              )
    //            )
    //        )
                                    json4解析json ——scala解析json一、org.json4s 引入pom的方法二、Json4s 数据类型三、 使用org.json4s解析json字符串3.1 解析 jsonString 中的 String 类型字段3.2 解析 jsonString 中的 Int类型字段3.3 解析单层嵌套json其他类型字段值4  多层嵌套套取单值
一、org.json4s 引入pom的方法
       <dependency>
            <groupId>org.j
                                    文章目录0 背景1 数据准备(读入数据)2 解析json文件3 组装json4 json写入到文件4.1 直接写入4.2 格式化json字符串后写入4 使用json4s
因为项目项目需要实现修改json数据后重新写入,原本解析json使用的json4sScala3貌似可以去使用circe-json),但是要实现替换json中的值然后重新写回到文件中实现起来方便(没有找到相对应的借口),于是去寻找了一个相对易用的包。找到了org.json,于是就用此包实现了相对应的功能。
1 数据准备(读入数据)
                                    本文章介绍一下javascript in jsonjson2.js中的parse()方法。
以下为json2js中的原文介绍
JSON.parse(text, reviver)
            This method parses a JSON text to produce an object or array.
            It can throw a Syn
                                    1. JSON.parse()用于从一个字符串中解析出json对象
<!--作者:zhangfan
页面名称:JSON.parse()、JSON.stringify()使用方法--> 
<template>
  <div id="product-list-one">
    <button @click="jsonParse()">执行jsonPar...
                                    JSON.parse()JSON 通常用于与服务端交换数据。在接收服务器数据时一般是字符串。我们可以使用 JSON.parse() 方法将数据转换为 JavaScript 对象。语法JSON.parse(text[, reviver])参数说明:text:必需, 一个有效的 JSON 字符串。reviver: 可选,一个转换结果的函数, 将为对象的每个成员调用此函数。JSON 解析实例例如我们从服...
                                    在提交表单的时候有时候需要我们将提交的数据中的某些需要删除数据对象中的某个元素,所以用JSON.parse(JSON.stringify(obj))来实现深拷贝得到一个对象,将该对象传给下个请求做参数
	JSON.parse(JSON.stringify(obj))我们一般用来深拷贝,其过程说白了 就是利用JSON.stringify 将js对象序列化(JSON字符串),再使用JSON.parse...