我是 Scala 的新手,并嘗試使用 Scala 的 foldLeft() 方法或任何其他功能解決方案來實作以下目標:
我有以下 JSON:
{
"aspects": [
{
"name": "Name",
"values": [
"Phone"
]
},
{
"name": "Color",
"values": [
"Red",
"Black"
]
},
{
"name": "Size",
"values": [
"6",
"10"
]
}
]
}
我想將其轉換為以下內容Seq<String>:
["Name:::Phone", "Color:::Red", "Color:::Black", "Size:::6", "Size:::10"]
我使用 Java 風格做到了,其中aspects是一個代表 JSON 的物件:
aspects.foreach(pair => {
pair.values.foreach(value => {
valuesList = pair.name ":::" value
})
})
Scala 最好的方法是什么?
uj5u.com熱心網友回復:
這取決于您使用的 JSON 庫,但是一旦您擁有aspects合適格式的資料,就可以生成如下所示的輸出:
case class Aspect(name: String, values: Seq[String])
val aspects: Seq[Aspect] = ???
aspects.flatMap(a => a.values.map(a.name ":::" _))
我用json4sandjackson和轉換代碼基本上就只是
val aspects = parse(json).extract[Seq[Aspect]]
查看檔案以獲取詳細資訊,并查看其他可能更適合您的應用程式的 JSON 庫。
uj5u.com熱心網友回復:
由于物件方面具有這些值,因此尚未決議 JSON。只需手動構建案例類并對其進行平面映射
scala> final case class Aspects(pairs:Seq[Pair])
defined class Aspects
val namepair = Pair("Name",Seq("Phone"))
namepair: Pair = Pair(Name,List(Phone))
val colorpair = Pair("Color",Seq("Red","Black"))
colorpair: Pair = Pair(Color,List(Red, Black))
val sizepair = Pair("Size",Seq("6","10"))
sizepair: Pair = Pair(Size,List(6, 10))
val aspects = Aspects(Seq(namepair,colorpair,sizepair))
aspects: Aspects = Aspects(List(Pair(Name,List(Phone)), Pair(Color,List(Red, Black)), Pair(Size,List(6, 10))))
aspects.pairs.flatMap(pair=>pair.values.map(value=>s"${pair.name}:::$value"))
res1: Seq[String] = List(Name:::Phone, Color:::Red, Color:::Black, Size:::6, Size:::10)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/498438.html
標籤:斯卡拉
