Json4s 全称就是Json For Scala,为Scala而生

首先上Maven依赖配置,其实Spark中自带了Json4s如果是编写Spark代码,并不需要单独引用Json4s的依赖了

 <dependency><groupId>org.json4s</groupId><artifactId>json4s-jackson_2.11</artifactId><version>3.3.0</version></dependency>

样例数据:

{"msgValues":"{\"BMS_50\":0.0,\"MCU_RM\":1.0}","brand":"Jork","source":"2","tid":"20200212101010"}

上面这条Json数据msgValues的值也是一条Json,我们先将其转为Map

    val str ="""{"msgValues":"{\"BMS_50\":0.0,\"MCU_RM\":1.0}","brand":"Jork","source":"2","tid":"20200212101010"}""".stripMarginval jsonStr: JValue = parse(str)//将Json字符串转为 JValueimplicit val formats = DefaultFormats //Json转任意指定类型必须指定隐士参数,我们这里默认就好val mapResult: Map[String, Any] = jsonStr.extract[Map[String, Any]]//使用extract转成Mapprintln(mapResult)

输出结果:

我们可以看到外层的Json是已经转为了Map,而内层的msgValues并没有转成Map结构。所以如果我们想要将msgValues转成Map则需要先取出msgValues转成Json再次转成Map,如下操作

 val str ="""{"msgValues":"{\"BMS_50\":0.0,\"MCU_RM\":1.0}","brand":"Jork","source":"2","tid":"20200212101010"}"""""".stripMarginval jsonStr: JValue = parse(str)implicit val formats = DefaultFormatsval msgValueJValue: JValue = jsonStr \ "msgValues"val msgValuesJson: JValue = parse(msgValueJValue.values.toString)val msgValuesMap: Map[String, Any] = msgValuesJson.extract[Map[String,Any]]println(msgValuesMap)

输出结果:

---------=====================================================
接着将JSon字符串映射成自定义实体,我们这里还是用上面的Json字符串,
最外层的实体就叫做JsonObj吧(也就是创建一个样例类)

 val jsonStr: JValue = parse(str)implicit val formats = DefaultFormats//样例类case class JsonObj(msgValues: String,brand: String,source: String,tid: String)val jsonObj: JsonObj = jsonStr.extract[JsonObj]println(jsonObj.brand+","+jsonObj.source)

结果就是转成功了,可以自由获取其属性了

但是需要注意的地方就是msgValues只是作为了一个属性塞进去了,如果想对msgVlause进行转成对象,我们应该和转Map类似, 先取单独出来字符串,再新建一个样例类然后再单独去转!这里就不做演示了

-------=========================================
– =接下来Map转Json
-------=========================================

 val tempMap: mutable.Map[String, String] = new scala.collection.mutable.HashMap[String,String]()tempMap.put("name","Rone")tempMap.put("age","88")val map2Json: String = Json(DefaultFormats).write(tempMap)println(map2Json)println( parse(map2Json) \"name")

这样就行了,主要就是调用write方法
–=多态用法=

 trait Animal case class Dog(name: String) extends Animalcase class Fish(weight: Double) extends Animalcase class Animals(animals: List[Animal])implicit val formats = Serialization.formats(ShortTypeHints(List(classOf[Dog], classOf[Fish])))val ser =  Json(formats).write(Animals(Dog("pluto") :: Fish(1.2) :: Nil))val result: Animals = Json(formats).read[Animals](ser)println(result)println(result.animals)println(result.animals(0).asInstanceOf[Dog].name)

至于自定义Formats这里就不做演示了,等我用到了再更新一下吧。哈哈

Json4s的一些用法 JSon转对象实体 Json转Map Map转Json相关推荐

  1. json 转对象函数_JSON_QUERY()函数从JSON数据提取对象

    json 转对象函数 In this article, we will explore JSON_QUERY() functions in SQL Server to extract JSON obj ...

  2. php json输出对象的属性值,JavaScript_jquery动态遍历Json对象的属性和值的方法,1、遍历 json 对象的属性/ - phpStudy...

    jquery动态遍历Json对象的属性和值的方法 1.遍历 json 对象的属性 //定义json对象 var person= { name: 'zhangsan', pass: '123', fn: ...

  3. json 反射java 实体_java反射实现javabean转json

    BeantoModel->利用cglib BeanMap . create ( src );直接将Bean装成Map,然后model . _setAttrs (map)即可. ModeltoBe ...

  4. Java对Json的一系列操作(构建、json与对象的转换)

    目录 前言: 一.JSON数据类型: 1.JSON对象: 2.JSON数组: 二.Java对json的操作: 1.构建JSON: 2.JSON和对象相互转换: 前言: 什么是JSON? 1.JSON ...

  5. Android JSON数据与实体类之间的相互转化-------GSON的简单用法

    Android JSON数据与实体类之间的相互转化-------GSON的用法 1_Gson的导入 1.1_方法一:直接导入jar包 1.2_方法二:引入依赖 2_json形式的字符串互转实体对象 2 ...

  6. java json 序列化对象空值不处理_jackson 实体转json 为NULL或者为空不参加序列化(实例讲解)...

    使用jackson进行序列化时,往往会遇到后台某个实体对象的属性为null,当序列化成json时对应的属性也为null:这样在某些前端组件上应用该json对象会报错.(例如:echarts) 下面总结 ...

  7. Jackson第一篇【JSON字符串、实体之间的相互转换】

    来源:http://blog.csdn.net/songyongfeng/article/details/6932655 既然你看到这篇文章相信你已经了解JSON的好处了,那么废话不多说直接进入主题. ...

  8. json 反射java 实体_Java 将JSON反射到实体类

    通过服务间调用拿到的数据返回的格式是JSON,如果你当前这个服务有实体数据类型可以对应上,那么就可以轻松愉快的搞定. 如果数据格式对不上,例如这个JSON里面有些数据是我们不想要的,这样我们实体的数据 ...

  9. 命名对象实体对象_我的对象命名

    命名对象实体对象 这是最常见的辩论之一. 大多数人对此主题有自己的见解,却没人能真正说出哪个是正确的. 我当然不能,但是尽管如此,我还是决定与大家分享我的想法,投入两美分,也许对某人会有帮助. 当我创 ...

最新文章

  1. 科学计算工具NumPy(1):ndarray的创建于数据类型
  2. Linux系统新手学习的11点建议
  3. 第三章 Java Servlet基础
  4. 老师,我来帮你推问卷
  5. MySQL的空值查询
  6. reactive programming 1.5 monads
  7. 批处理if 命令示例详解
  8. 特权级概述(哥子就想知道CPU是如何验证特权级的)GATE+TSS
  9. php transfer-encoding: chunked,php – 使用chunked transfer encoding和gzip
  10. Android 多级树形菜单
  11. 再思linux内核在中断路径内不能睡眠/调度的原因(2010)【转】
  12. 虚拟机中Linux安装可视化界面
  13. html中怎么让图片做背景透明背景图片,透明背景图片怎么做?
  14. 关于区块链你了解多少,用思维导图带你快速了解区块链
  15. 自动删除QQ空间指定好友的留言
  16. android 自动打开第三方应用商店,Android应用自动跳转到应用市场详情页面的方法...
  17. Fabric2.3分布式部署
  18. 适合Python新手的爬虫练习:网易LOFTER图片爬虫(二)
  19. Mybatis插入语句
  20. 经典卷积神经网络模型 - InceptionNet

热门文章

  1. SpringSecurity的安全认证的详解说明(附完整代码)
  2. Java与智能工厂:构建智能化的生产制造系统
  3. springboot 整合activiti7时报错 no processes delpoyed with key ‘xxxxx‘
  4. 计算机科学家薛来,薛来经典演讲稿
  5. 【收藏】❤️❤️❤️50道经典c#程序面试题——机试篇
  6. endnote咋手动输入文献_EndNote导入Word手动输入参考文献的方法图解教程
  7. GBA破解老笔记-SD高达G世纪Advance
  8. Android 安卓人脸识别(百度人脸识别)快速集成采坑
  9. c语言规定变量有三种属性分别是,C++面向对象程序设计重点复习资料
  10. 2022 最新 Java 基础 面试题(一)