【发布时间】:2018-01-04 15:53:15
【问题描述】:
我有一个 yaml 文件,我想在 scala 中读取它的内容,所以我使用 io.circe.yaml 将其解析为 json
var js = yaml.parser.parse(ymlText)
var json=js.valueOr(null)
var jsonstring=json.toString
val json2 = parse(jsonstring)
yamltext 是这样的:
ALL:
Category1:
Subcategory11 : 1.5
Subcategory12 : 0
Subcategory13 : 0
Subcategory14 : 0.5
Category2:
Subcategory21 : 1.5
Subcategory22 : 0.3
Subcategory23 : 0
Subcategory24 : 0
我想要过滤具有零值的子类别,我使用了以下代码:
val elements = (json2 \\"ALL" ).children.map(x=>(x.values))
var subCategories=elements.map{case(a,b)=>(b)}
var cats=elements.map{case(a,b)=>(b.asInstanceOf[Map[String,Double]])}
cats.map(x=>x.filter{case(a,b)=>b>0.0})
但最后一行给了我这个错误: scala.math.BigInt 不能转换为 java.lang.Double
【问题讨论】:
-
parse在val json2 = parse(jsonString)中的功能是什么。我想假设它是 circle.json.parser.parse,但是 circe 的 AST 没有children字段,所以你在底部的代码 sn-p 对这个假设没有意义。跨度> -
您是否检查过(例如通过打印)BigInts 在哪个阶段弹出而不是双打?当我用 circe 解析你的 yaml 时,我得到了两倍。
-
事实上第二个解析是拥有 JValue 实例,我使用它是因为我不知道方法(right.get),Mr.SergGr 给了我正在寻找的答案。谢谢