Scala Learning(1): 使用Pattern Matching表达JSON

简介:

这是一个挺能展现Scala编程方式的例子,对正在熟悉Scala这门语言的开发者很有帮助。

Representing JSON

用Scala来表达JSON(Java Script Object Notation)结构,

{
  "firstname" : "John",
  "lastname" : "Smith",
  "address" : {
    "street" : "21 2nd Street",
    "state" : "NY",
    "postalCode" : 10021
  },
  "phoneNumbers" : [
    { "type" : "home", "number" : "212 555-1234" },
    { "type" : "fax", "number : "646 555-4567" }
  ] 
}

Scala表示JSON的一种类结构:

abstract class JSON
case class JSeq (elems: List[JSON]) extends JSON
case class JObj (bindings: Map[String, JSON]) extends JSON
case class JNum (num: Double) extends JSON
case class JStr (str: String) extends JSON
case class JBool(b: Boolean) extends JSON
case object JNull extends JSON

Example

val data = JObj(Map(
  "firstName" -> JStr("John"),
  "lastName" -> JStr("Smith"),
  "address" -> JObj(Map(
    "street" -> JStr("21 2nd Street"),
    "state" -> JStr("NY"),
    "postalCode" -> JNum(10021)
  )),
  "phoneNumbers" -> JSeq(List(
    JObj(Map(
      "type" -> JStr("home"), "number" -> JStr("212 555-1234")
    )),
    JObj(Map(
      "type" -> JStr("fax"), "number"-> JStr("646 555-4567")
    )) 
  ))
))

利用Pattern Matching,展示一个输出JSON string串的方法:

def show(json: JSON): String = json match {
  case JSeq(elems) =>
    "[" + (elems map show mkString ", ") + "]"
  case JObj(bindings) =>
    val assocs = bindings map {
      case (key, value) => "\"" + key + "\": " + show(value)
    }
  "{" + (assocs mkString ", ") + "}"
  case JNum(num) => num.toString
  case JStr(str) => '\"' + str + '\"'
  case JBool(b) => b.toString
  case JNull => "null"
}

参考自 Principles of Reactive Programming

全文完 :)

目录
相关文章
|
2月前
|
SQL 分布式计算 Java
大数据-96 Spark 集群 SparkSQL Scala编写SQL操作SparkSQL的数据源:JSON、CSV、JDBC、Hive
大数据-96 Spark 集群 SparkSQL Scala编写SQL操作SparkSQL的数据源:JSON、CSV、JDBC、Hive
47 0
|
JSON fastjson Java
scala使用Gson和FastJson解析JSON
kafka传过来的数据好多都是JSON格式,需要对其解析,抽取出应用需要的数据。Gson和FastJson是两个不错的解析工具,以后可能经常会使用到,记录一下,防止以后遗忘。
964 0
|
JSON Java Scala
Scala中使用JSON.toJSONString报错:ambiguous reference to overloaded definition
问题描述: [ERROR] /Users/jack/book/lightsword/src/main/scala/com/springboot/in/action/filter/LoginFilter.
2302 0
|
JSON Java Scala
13.10 Scala中使用JSON.toJSONString报错:ambiguous reference to overloaded definition
13.10 Scala中使用JSON.toJSONString报错:ambiguous reference to overloaded definition 问题描述: [ERROR] /Users/jack/book/lightsword/src/...
1233 0
|
2月前
|
数据采集 JSON 数据处理
抓取和分析JSON数据:使用Python构建数据处理管道
在大数据时代,电商网站如亚马逊、京东等成为数据采集的重要来源。本文介绍如何使用Python结合代理IP、多线程等技术,高效、隐秘地抓取并处理电商网站的JSON数据。通过爬虫代理服务,模拟真实用户行为,提升抓取效率和稳定性。示例代码展示了如何抓取亚马逊商品信息并进行解析。
抓取和分析JSON数据:使用Python构建数据处理管道
|
1月前
|
JSON 数据格式 索引
Python中序列化/反序列化JSON格式的数据
【11月更文挑战第4天】本文介绍了 Python 中使用 `json` 模块进行序列化和反序列化的操作。序列化是指将 Python 对象(如字典、列表)转换为 JSON 字符串,主要使用 `json.dumps` 方法。示例包括基本的字典和列表序列化,以及自定义类的序列化。反序列化则是将 JSON 字符串转换回 Python 对象,使用 `json.loads` 方法。文中还提供了具体的代码示例,展示了如何处理不同类型的 Python 对象。