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

本文涉及的产品
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 快速学习行政区信息_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

相关文章
|
21天前
|
JSON 算法 vr&ar
目标检测笔记(五):查看通过COCOEvaluator生成的coco_instances_results.json文件的详细检测信息,包含AP、AR、MR和DR等
本文介绍了如何使用COCO评估器通过Detectron2库对目标检测模型进行性能评估,生成coco_instances_results.json文件,并利用pycocotools解析该文件以计算AP、AR、MR和DR等关键指标。
50 1
目标检测笔记(五):查看通过COCOEvaluator生成的coco_instances_results.json文件的详细检测信息,包含AP、AR、MR和DR等
|
29天前
|
SQL 存储 JSON
SQL,解析 json
SQL,解析 json
62 8
|
8天前
|
自然语言处理 数据可视化 前端开发
从数据提取到管理:合合信息的智能文档处理全方位解析【合合信息智能文档处理百宝箱】
合合信息的智能文档处理“百宝箱”涵盖文档解析、向量化模型、测评工具等,解决了复杂文档解析、大模型问答幻觉、文档解析效果评估、知识库搭建、多语言文档翻译等问题。通过可视化解析工具 TextIn ParseX、向量化模型 acge-embedding 和文档解析测评工具 markdown_tester,百宝箱提升了文档处理的效率和精确度,适用于多种文档格式和语言环境,助力企业实现高效的信息管理和业务支持。
3916 2
从数据提取到管理:合合信息的智能文档处理全方位解析【合合信息智能文档处理百宝箱】
|
24天前
|
机器学习/深度学习 自然语言处理 JavaScript
信息论、机器学习的核心概念:熵、KL散度、JS散度和Renyi散度的深度解析及应用
在信息论、机器学习和统计学领域中,KL散度(Kullback-Leibler散度)是量化概率分布差异的关键概念。本文深入探讨了KL散度及其相关概念,包括Jensen-Shannon散度和Renyi散度。KL散度用于衡量两个概率分布之间的差异,而Jensen-Shannon散度则提供了一种对称的度量方式。Renyi散度通过可调参数α,提供了更灵活的散度度量。这些概念不仅在理论研究中至关重要,在实际应用中也广泛用于数据压缩、变分自编码器、强化学习等领域。通过分析电子商务中的数据漂移实例,展示了这些散度指标在捕捉数据分布变化方面的独特优势,为企业提供了数据驱动的决策支持。
47 2
信息论、机器学习的核心概念:熵、KL散度、JS散度和Renyi散度的深度解析及应用
|
16天前
|
人工智能 前端开发 JavaScript
拿下奇怪的前端报错(一):报错信息是一个看不懂的数字数组Buffer(475) [Uint8Array],让AI大模型帮忙解析
本文介绍了前端开发中遇到的奇怪报错问题,特别是当错误信息不明确时的处理方法。作者分享了自己通过还原代码、试错等方式解决问题的经验,并以一个Vue3+TypeScript项目的构建失败为例,详细解析了如何从错误信息中定位问题,最终通过解读错误信息中的ASCII码找到了具体的错误文件。文章强调了基础知识的重要性,并鼓励读者遇到类似问题时不要慌张,耐心分析。
|
3天前
|
存储 JSON 监控
公司用什么软件监控电脑:JSON 在监控信息交互中的应用探索
在现代企业管理中,电脑监控软件广泛应用于保障信息安全和提升工作效率。JSON(JavaScript Object Notation)因其简洁和易读性,在监控信息的收集、传输和处理中扮演着关键角色。本文介绍了 JSON 在监控数据结构、信息传输及服务器端处理中的具体应用,展示了其在高效监控系统中的重要性。
17 0
|
28天前
|
存储 缓存 并行计算
yolov5的train.py的参数信息解析
这篇文章解析了YOLOv5的`train.py`脚本中的参数信息,详细介绍了每个参数的功能和默认值,包括权重路径、模型配置、数据源、超参数、训练轮数、批量大小、图像尺寸、训练选项、设备选择、优化器设置等,以便用户可以根据需要自定义训练过程。
24 0
|
28天前
|
JSON JavaScript API
商品详情数据接口解析返回的JSON数据(API接口整套流程)
商品详情数据接口解析返回的JSON数据是API接口使用中的一个重要环节,它涉及从发送请求到接收并处理响应的整个流程。以下是一个完整的API接口使用流程,包括如何解析返回的JSON数据:
|
22天前
|
缓存 Java 程序员
Map - LinkedHashSet&Map源码解析
Map - LinkedHashSet&Map源码解析
55 0
|
22天前
|
算法 Java 容器
Map - HashSet & HashMap 源码解析
Map - HashSet & HashMap 源码解析
47 0

推荐镜像

更多