如何在scala中解析和读取json数据并通过迭代值形成字符串?

问题描述 投票:0回答:1

我正在尝试解析此 json 数据,然后读取 Orders 元素下的值。我的最终目标是读取 order 元素下的所有可用键,然后通过连接值创建一个字符串。例如,在“订单”下,我有 orderid、customerid 和 orderprice。我想要形成一个字符串,其值为“order_id,customers.customerIdorder.price.charge,

{"Orders":{"orderid":"order_id","customerId":"customers.customerId","orderprice":"order.price.charge"},"Products":{"productid":"product_id","productName":"products.productName"}}



import org.apache.spark.sql.functions._
import org.apache.spark.sql.types._
import spark.implicits._
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);

此后我无法迭代读取键并创建连接的字符串。有人可以帮忙吗。

scala apache-spark
1个回答
0
投票

您可以使用

com.lihaoyi:ujson_2.12:3.1.4,com.lihaoyi:upickle_2.12:3.1.4
Spark 选项导入
--package

spark-shell --packages "com.lihaoyi:ujson_2.12:3.1.4,com.lihaoyi:upickle_2.12:3.1.4"

val jsonString="""
{
    "Orders": {
        "orderid": "order_id",
        "customerId": "customers.customerId",
        "orderprice": "order.price.charge"
    },
    "Products": {
        "productid": "product_id",
        "productName": "products.productName"
    }
}
"""

使用

json string
方法将
json
转换为
ujson.read
格式。

 val data = ujson.read(jsonString)

下面是使用

,
提取其键和联系人值的代码。

data
.obj
.keys
.map{ key => 
   Map(key -> data.obj(key).obj.values.map(_.str).mkString(",")) 
}

下面是输出并使用过滤器来过滤特定的键。

Set(Map(Orders -> order_id,customers.customerId,order.price.charge), Map(Products -> product_id,products.productName))
© www.soinside.com 2019 - 2024. All rights reserved.