我正在解析一个主 json,其中包含 scala 中的完整数据。然后我需要加载另一个 json,它具有用于过滤每个对象的必需属性,例如 Orders 就是其中之一。我需要读取所有值而不对任何键进行硬编码。然后我需要以这种方式为订单对象“order_id,customers.customerId”创建一个字符串。你能帮我创建这个字符串吗
{
"Orders": {
"orderid": "order_id",
"customerId": "customers.customerId"
},
"Products": {
"productid": "product_id",
"productName": "products.productName"
}
}
你能用 scala 帮我吗?
我使用了maven包
play-json
(version: 2.7.4, scala: 2.13
)来实现以下结果。在高层次上,解析 JSON 字符串 -> 将字符串转换为每个 kv 对的映射 -> 使用 foldLeft
生成感兴趣的字符串
import play.api.libs.json._
val jsonString = """
{
"Orders": {
"orderid": "order_id",
"customerId": "customers.customerId"
},
"Products": {
"productid": "product_id",
"productName": "products.productName"
}
}
"""
def returnKeysOfInterest(jsonString: String, keyName: String): String = {
val json: JsValue = Json.parse(jsonString)
val map: Map[String, JsValue] = json.as[Map[String, JsValue]]
val keysMap: Map[String, String] = map(keyName).as[Map[String, String]]
val keysString: String = keysMap.values.foldLeft("")((a, b) => if (a.isEmpty) b else a + "," + b)
keysString
}
returnKeysOfInterest(jsonString, "Orders") // order_id,customers.customerId
在这里,我假设 kv 对具有一层嵌套,正如您共享的输入所建议的那样。如果有更多级别的嵌套,那么我们可以相应地修改
keysString
变量。