Scala解析JSON并遍历值生成拼接字符串的实现求助
解决方案
JSON.parseFull返回的是Option[Any],需要先安全提取解析后的JSON结构,再定位到Orders节点,最后提取所有值完成拼接。以下是具体实现:
完整代码示例
import scala.util.parsing.json._ val jsonString="""{"Orders":{"orderid":"order_id","customerId":"customers.customerId","orderprice":"order.price.charge"},"Products":{"productid":"product_id","productName":"products.productName"}}"""; val json_data = JSON.parseFull(jsonString); // 提取Orders值并拼接成目标字符串 val result = json_data match { case Some(root: Map[String, Any]) => root.get("Orders") match { case Some(orders: Map[String, String]) => orders.values.mkString(",") case _ => "" // 处理Orders不存在或类型不匹配的情况 } case _ => "" // 处理JSON解析失败的情况 } println(result) // 输出:order_id,customers.customerId,order.price.charge
代码说明
- 解析结果处理:通过模式匹配捕获
JSON.parseFull成功解析的根JSON对象(根节点是Map[String, Any]类型),避免空指针或类型转换异常。 - 定位Orders节点:从根Map中取出
Orders对应的value,再匹配为Map[String, String](因为Orders下的键值均为字符串类型)。 - 值拼接:调用
orders.values.mkString(","),将Map中所有值用逗号连接成目标字符串。 - 异常分支:添加匹配失败的分支返回空字符串,保证代码健壮性。
可选:Spark SQL实现方式
如果依赖Spark环境,也可以用Spark原生API简化操作:
import org.apache.spark.sql.SparkSession val spark = SparkSession.builder().appName("JSONParse").master("local[*]").getOrCreate() import spark.implicits._ val jsonString="""{"Orders":{"orderid":"order_id","customerId":"customers.customerId","orderprice":"order.price.charge"},"Products":{"productid":"product_id","productName":"products.productName"}}"""; val df = spark.read.json(Seq(jsonString).toDS()) // 提取Orders所有值并拼接 val result = df.select("Orders.*") .first() .toSeq .map(_.toString) .mkString(",") println(result) // 输出:order_id,customers.customerId,order.price.charge
内容的提问来源于stack exchange,提问作者Shankar Panda
相关产品推荐
相关产品推荐

