小白学习Spark系列五:scala解析多级json格式字符串
一、背景
处理json格式的字符串,key值一定为String类型,但value不确定是什么类型,也可能嵌套json字符串,以下是使用 JSON.parseFull 来解析多层json。
二、实例代码
import collection.mutable.Map
import scala.util.parsing.json._
def regJson(json:Option[Any]) = json match {
//转换类型
case Some(map:collection.immutable.Map[String, Any]) => map
} def str_json(string_json:String):collection.immutable.Map[String,Any]=
{
var first :collection.immutable.Map[String, Any] = collection.immutable.Map()
val jsonS = JSON.parseFull(string_json)
//不确定数据的类型时,此处加异常判断
if (jsonS.isInstanceOf[Option[Any]]){
first = regJson(jsonS)
}
first
}
val jsonStr = """{"id":"1", "name":"jack","detail_info":{"age":"18","sex":"man"}}"""
val parse_str = str_json(jsonStr)
//parse_str: scala.collection.immutable.Map[String,Any] = Map(id -> 1, name -> jack, detail_info -> Map(age -> 18, sex -> man))
val id = parse_str("id")
//res7: Any = 1,此处为Any类型,一定要在使用前转换为原有类型,可以用asInstanceOf函数
val id_str = parse_str("id").toString
//res8: String = 1
val detail_info = parse_str("detail_info")
//res9: Any = Map(age -> 18, sex -> man)
//val parse_str("detail_info").asInstanceOf[Map[String, String]]
//提示错误:java.lang.ClassCastException: scala.collection.immutable.Map$Map2 cannot be cast to scala.collection.mutable.Map。注意Map类型
val parse_detail = parse_str("detail_info").asInstanceOf[scala.collection.immutable.Map[String,Any]]
//parse_detail: scala.collection.immutable.Map[String,Any] = Map(age -> 18, sex -> man)
val sex_str = parse_detail("sex").toString
//res14: String = man
val parse_detail = parse_str("detail_info").asInstanceOf[scala.collection.immutable.Map[String,Any]]
三、分析
以上代码中,需要注意的两点是(1)类型转换时,默认的Map为 scala.collection.immutable.Map,由于第一行声明了可变Map类型,所在在后期 asInstanceOf ()嵌套的json格式字符串时,需要显示声明不可变map类型。(2)由于不确定json字符串的值类型,需要使用Any类型预定义,在具体解析某个字段时,必须用 asInstanceOf() 来解析成原有的数据类型,否则会报错。
小白学习Spark系列五:scala解析多级json格式字符串的更多相关文章
- 小白学习Spark系列四:RDD踩坑总结(scala+spark2.1 sql常用方法)
初次尝试用 Spark+scala 完成项目的重构,由于两者之前都没接触过,所以边学边用的过程大多艰难.首先面临的是如何快速上手,然后是代码调优.性能调优.本章主要记录自己在项目中遇到的问题以及解决方 ...
- 小白学习Spark系列三:RDD常用方法总结
上一节简单介绍了Spark的基本原理以及如何调用spark进行打包一个独立应用,那么这节我们来学习下在spark中如何编程,同样先抛出以下几个问题. Spark支持的数据集,如何理解? Spark编程 ...
- 小白学习Spark系列一:Spark简介
由于最近在工作中刚接触到scala和Spark,并且作为python中毒者,爬行过程很是艰难,所以这一系列分为几个部分记录下学习<Spark快速大数据分析>的知识点以及自己在工程中遇到的小 ...
- 小白学习Spark系列二:spark应用打包傻瓜式教程(IntelliJ+maven 和 pycharm+jar)
在做spark项目时,我们常常面临如何在本地将其打包,上传至装有spark服务器上运行的问题.下面是我在项目中尝试的两种方案,也踩了不少坑,两者相比,方案一比较简单,本博客提供的jar包适用于spar ...
- 小白学习Spark系列六:Spark调参优化
前几节介绍了下常用的函数和常踩的坑以及如何打包程序,现在来说下如何调参优化.当我们开发完一个项目,测试完成后,就要提交到服务器上运行,但运行不稳定,老是抛出如下异常,这就很纳闷了呀,明明测试上没问题, ...
- JSON(五)——同步请求中使用JSON格式字符串进行交互(不太常见的用法)
在同步请求中使用JSON格式进行数据交互的场景并不多,同步请求是浏览器直接与服务器进行数据交互的大多是用jsp的标签jstl和el表达式对请求中的数据进行数据的渲染.我也是在一次开发中要从其它服务器提 ...
- 关于json格式字符串解析并用mybatis存入数据库
园子里面找了很多关于json解析后存入数据库的方法,不是太乱,就是没有写完,我下面的主题代码多是受下面两位的启发,请按顺序查看 http://www.cnblogs.com/tian830937/p/ ...
- 逐层解析请求json参数字符串【我】
import net.sf.json.JSONObject; 逐层解析请求json参数字符串: InputStream inStream =null; BufferedReader br =null; ...
- 在论坛中出现的比较难的sql问题:36(动态行转列 解析json格式字符串)
原文:在论坛中出现的比较难的sql问题:36(动态行转列 解析json格式字符串) 所以,觉得有必要记录下来,这样以后再次碰到这类问题,也能从中获取解答的思路.
随机推荐
- react面试题(一)
react 生命周期函数 初始化阶段: getDefaultProps:获取实例的默认属性 getInitialState:获取每个实例的初始化状态 componentWillMount:组件即将被装 ...
- cc2540 cc2541 开发板资料更新日志
经过多次PCB打样和全面调试.已经完毕了cc2540 cc2541的开发板的批量贴片.硬件告一段落, 接下来是全面完好软件方面的工作.眼下已经针对没有开发经验的用户编写完毕0基础基础实验代码和教程.接 ...
- python练习-跳出多层循环和购物车
跳出多层循环:三层循环,最里层直接跳出3层 在Python中,函数运行到return这一句就会停止,因此可以利用这一特性,将功能写成函数,终止多重循环 def work(): for i in ran ...
- shell学习三十七天----引用
引用 案例,假设我想输出一个星号(*),使用echo怎样做? echo * 这是肯定不行的,须要将*转移,即:echo \* 这样就引出了引用的概念.所为引用,是用来防止shell将某些你想要的东西解 ...
- 如何利用UDP协议封装一个数据包
在如何封装一个数据包上,是一个非常细致的问题,而利用UDP协议来封装的话,是比较简单,让我们一步步来分析典型的TCP/IP协议.一般来说一个典型的一个数据包,包括以太网MAC头+网络层IP数据头+传输 ...
- [LeetCode] Unique Binary Search Tree
Given n, how many structurally unique BST's (binary search trees) that store values 1...n? For examp ...
- B1090 [SCOI2003]字符串折叠 区间dp
又一道区间dp,和上一篇类似,但是比他简单,这个只有两种转移方法,不是很复杂.直接判断是否为重复的串就行. 题干: Description 折叠的定义如下: . 一个字符串可以看成它自身的折叠.记作S ...
- Scala 获取当前时间
def NowDate(): String = { val now: Date = new Date() val dateFormat: SimpleDateFormat = new SimpleDa ...
- php phppowerpoint
今天早上从订阅的 Zend DevZone 看到篇很有意思的文章. Creating PowerPoint 2007 files using PHP. 试了一下. 果然很又意思, 分享给大家吧. 程序 ...
- hash练习们
610. 数对的个数 ★★ 输入文件:dec.in 输出文件:dec.out 简单对比时间限制:1 s 内存限制:128 MB Description出题是一件痛苦的事情!题目看多了也 ...