行政区信息_JSON 解析|学习笔记

简介: 快速学习行政区信息_JSON 解析

开发者学堂课程【大数据 Spark2020版(知识精讲与实战演练)第四阶段 行政区信息_JSON 解析】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/691/detail/12119


行政区信息_JSON 解析

JSON 解析

后续任务获取每一个条数据下车点的行政区名称,要明确有多少行政区,每个行政区的范围,通过下车的经纬度判断属于哪一个行政区,数据集是 JSON 格式,将数据集解析出来。

工具介绍部分要解析 JSON,Geometry,通过 GeoJSON 解析工具解析成 Geometry 对象,通过工具介绍理解如何解析 JSON,如何解析 Geometry。在地理位置相关的数据中,要了解 Geometry。

1.JSON4S 介绍

(1)介绍

一般在 Java 中,常使用如下三个工具解析 JSON

Gson

Google 开源的 JSON 解析工具,也支持时间解析,比较人性化,易于使用,但是性能不如 Jackson ,也不如 Jackson 有积淀

Jackson

Jackson 是功能最完整的 JSON 解析工具,也是最老牌的 JSON 解析工具,性能也足够好,但是 API 在一开始支持的比较少,用起来稍微有点繁琐

FastJson

阿里巴巴的 JSON 开源解析工具,以快著称,但是某些方面用起来稍微有点反直觉

根据自身实际情况进行选择,三个工具在 scala 中解析 JSON,不太容易,因为 Scala 与 java 不同,没办法直接解析。

(2)什么是 JSON 解析

image.png

左侧是 JSON 数据,{代表对象,name 代表字段,age 代表另一个字段,name 是值是张三,是一个字符串,age 值的20,是一个数值型;正常情况下,使用对象表示数据表,将 JSON 字符串转成 scala 对象形式,这一过程称为 JSON 解析,JSON 与Scala 都有 name 和 age,JSON 解析简单来说是把 JSON 字符串中的信息抽取出来的过程就是 JSON 解析,一般转为 Scala 对象。

读取 JSON 数据的时候,读出来的是一个有格式的字符串,将这个字符串转换为对象的过程就叫做解析

可以使用 JSON4S 来解析 JSON,JSON4S 是一个其它解析工具的 Scala 封装以适应 Scala 的对象转换

JSON4S 支持 Jackson 作为底层的解析工具

导入两个包

Step 1:导入 Maven 依赖

<! -- JSON4S -->

<dependency>

<groupId>org.json4s</ groupId>

<artifactId>json4s-native_2.11</artifactId>

<version>$json4s.version}</version>

</dependency>

<! --JSoN4S的Jackson集成库-->

<dependency>

<groupId>org.json4s</ groupId>

<artifactId>json4s-jackson_2.11</artifactId>

<version>${json4s.version}</version>

</dependency>

导入放到项目中,找到 pom 文件

JSON4S 是 scala 中的 JSON 解析工具,S 是指 scala,JSON4S 不是一个解析工具,是一个上层 API,可以使用 Jackson 作为底层的解析工具,关系像 JSON4S 提高 API,Jackson 提供底层功能,

演示如何使用创建一个 scala class,叫做 JsonTest

将 class 改为 object,写出 main 方法,杜撰 JSON 字符串,name 代表名称,price 代表价格

创建 scala 对象 Product,名称要一一对应,可以对 product 类创建对象,将具体的值赋值。

解析 JSON 使用 parse,导入两个包

Parse 方法返回的并不是一个具体的对象,返回的格式是一个 JValue 类型的数据,JValue 类型的数据是 JSON4S 中表示 JSON 对象的类型,有 JValue 可以在其中查找信息,找到 name 中的值

运行,结果是 JString(Toy),与前面的 Toy 是一样的

object JsonTest {

def main(args: Array[string]): Unit = {

import org.json4s._

import org.json4s.jackson. JsonMethods._

val product =

"""

|{"name" : "Toy" , "price" : 35.35}

""".stripMargin

parse(product)\"name"

}

}

case class Product(name : String, price: Double)

通过 parse 解析 JSON,得到 JValue,通过 JValue 有一个自定义的方法\,\后面可以直接查找 name 字段中的值,也是解析的一种方式,最终希望将 JSON 转成 product 对象形式,直接取 name,不需要查找

通过 extra 将 JValue 转化成 product 类型,横线是缺少隐式转换,导入隐式转换进行隐式传递

使用 foemats 隐式转换是一种转换规则,

parse(product)\"name"

改为

parse(product).extract[Product]

//隐士转换的形式提供格式工具,例如如何解析时间字符串

implicit val formats = Serialization.formats(NoTypeHints)

//具体的解析为某一个对象

val productobj1 = parse(product).extract[ Product]

printLn(productobj1)

}

}

case class Product( name: string, price: Double)

运行

image.png

通过 read 方法直接将字符串转成对象形式,和 parse 有区别,parse 先转成 JValue,可以进行搜索,read 方法像序列化,使用 read 要导入包

def main(args : Array [string]): Unit = {

import org.json4s._

import org.json4s.jackson. JsonMethods._

import org.json4s.jackson.Serialization.{read,write}

val product =

"""

|{"name" : "Toy" ,"price" : 35.35}

""".stripMargin

//隐式转换的形式提供格式工具,例如i如I何解析时间字符串

implicit val formats = serialization.formats(NoTypeHints)

//具体的解析为某一个对象

val productobj1 = parse(product). extract[Product]

//可以通过一个方法,直接将 JSON 字符串转为对象,但是这种方式就无法进行搜索了

val productobj2 = read[Product](product)

println(productobj4

}

}

case class Product( name: string price: Double)

运行

可以将 JSON 字符串转成对象,同时可以将对象转成 JSON 字符串

创建一个对象,render 中接收的是对象,将结果 compact,转成具体的类型,将对象转成 JSON 字符串,render 将对象中一些非法值去掉,通过 compact 转成字符串,要求 render 中所传的不能说 product 对象,是一个 JValue 对象,只有一个对象,使用 write 方法将对象直接写为 JSON 字符串形式,read 理解为将一个字符串反序列化为对象,write 将一个对象序列化我字符串,字符串都是 JSON

格式

//隐士转换的形式提供格式工具,例如如I何解析时问字符串

implicit val formats = serialization.formats(NoTypeHints)

//具体的解析为某一个对象

val productobj1 = parse(product).extract[Product]

//可以通过一个方法,直按将 JSON 字符串转为对象,但是这种方式就无法进行搜索了

val productobj2 = read[Product](product)

//将对象转为 JSON 字符串

val productobj3 = Product("电视",10.5)

val jsonstr1 = compact(render( product0bj3))val jsonStr = write(productObj3)

println(jsonstr)

转换结果没有问题

image.png

相关文章
|
3月前
|
数据采集 JSON 数据可视化
JSON数据解析实战:从嵌套结构到结构化表格
在信息爆炸的时代,从杂乱数据中提取精准知识图谱是数据侦探的挑战。本文以Google Scholar为例,解析嵌套JSON数据,提取文献信息并转换为结构化表格,通过Graphviz制作技术关系图谱,揭示文献间的隐秘联系。代码涵盖代理IP、请求头设置、JSON解析及可视化,提供完整实战案例。
260 4
JSON数据解析实战:从嵌套结构到结构化表格
|
3月前
|
机器学习/深度学习 人工智能 文字识别
从“泛读”到“精读”:合合信息文档解析如何让大模型更懂复杂文档?
随着deepseek等大模型逐渐步入视野,理论上文档解析工作应能大幅简化。 然而,实际情况却不尽如人意。当前的多模态大模型虽然具备强大的视觉与语言交互能力,但在解析非结构化文档时,仍面临复杂版式、多元素混排以及严密逻辑推理等挑战。
95 0
|
5月前
|
JSON 前端开发 搜索推荐
关于商品详情 API 接口 JSON 格式返回数据解析的示例
本文介绍商品详情API接口返回的JSON数据解析。最外层为`product`对象,包含商品基本信息(如id、name、price)、分类信息(category)、图片(images)、属性(attributes)、用户评价(reviews)、库存(stock)和卖家信息(seller)。每个字段详细描述了商品的不同方面,帮助开发者准确提取和展示数据。具体结构和字段含义需结合实际业务需求和API文档理解。
|
5月前
|
JSON 小程序 UED
微信小程序 app.json 配置文件解析与应用
本文介绍了微信小程序中 `app.json` 配置文件的详细
840 12
|
5月前
|
JSON 缓存 API
解析电商商品详情API接口系列,json数据示例参考
电商商品详情API接口是电商平台的重要组成部分,提供了商品的详细信息,支持用户进行商品浏览和购买决策。通过合理的API设计和优化,可以提升系统性能和用户体验。希望本文的解析和示例能够为开发者提供参考,帮助构建高效、可靠的电商系统。
139 12
|
5月前
|
数据采集 XML API
深入解析BeautifulSoup:从sohu.com视频页面提取关键信息的实战技巧
深入解析BeautifulSoup:从sohu.com视频页面提取关键信息的实战技巧
|
3月前
|
算法 测试技术 C语言
深入理解HTTP/2:nghttp2库源码解析及客户端实现示例
通过解析nghttp2库的源码和实现一个简单的HTTP/2客户端示例,本文详细介绍了HTTP/2的关键特性和nghttp2的核心实现。了解这些内容可以帮助开发者更好地理解HTTP/2协议,提高Web应用的性能和用户体验。对于实际开发中的应用,可以根据需要进一步优化和扩展代码,以满足具体需求。
332 29
|
3月前
|
前端开发 数据安全/隐私保护 CDN
二次元聚合短视频解析去水印系统源码
二次元聚合短视频解析去水印系统源码
96 4
|
3月前
|
JavaScript 算法 前端开发
JS数组操作方法全景图,全网最全构建完整知识网络!js数组操作方法全集(实现筛选转换、随机排序洗牌算法、复杂数据处理统计等情景详解,附大量源码和易错点解析)
这些方法提供了对数组的全面操作,包括搜索、遍历、转换和聚合等。通过分为原地操作方法、非原地操作方法和其他方法便于您理解和记忆,并熟悉他们各自的使用方法与使用范围。详细的案例与进阶使用,方便您理解数组操作的底层原理。链式调用的几个案例,让您玩转数组操作。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
3月前
|
移动开发 前端开发 JavaScript
从入门到精通:H5游戏源码开发技术全解析与未来趋势洞察
H5游戏凭借其跨平台、易传播和开发成本低的优势,近年来发展迅猛。接下来,让我们深入了解 H5 游戏源码开发的技术教程以及未来的发展趋势。

推荐镜像

更多
  • DNS