Json4s(Scala)中的JValue:如何创建空JValue

lf3rwulv  于 2022-11-09  发布在  Scala
关注(0)|答案(1)|浏览(220)

我想创建一个空的JValue,以便能够一起解析JSON对象。
现在,我正在创建包含{}JValue,然后将其他对象解析到它,最后使用RDD删除第一行,但我想创建

var JValue: JValue = JValue.empty

从一开始就能跳过拆卸部分。
是否可以创建一个空的JValue

import org.json4s._
import org.json4s.jackson.JsonMethods._

var JValue: JValue = parse("{}")
val a = parse(""" {"name":"Scott", "age":33} """)
val b = parse(""" {"name":"Scott", "location":"London"} """)

JValue = JValue.++(a)
JValue = JValue.++(b)

val df = spark.read.json(Seq(compact(render(JValue ))) toDS())
val rdd = df.rdd.first()
val removeFirstRow = df.rdd.filter(row => row != rdd)
val newDataFrame = spark.createDataFrame(removeFirstRow,df.schema)
6ljaweal

6ljaweal1#

如果我正确理解您要实现的目标,您可以从一个空数组开始,如下所示:

var JValue: JValue = JArray(List.empty)

在空数组上调用++方法将导致将项添加到该数组,如此处所定义的。
最终结果是以下对象:

[ {
  "name" : "Scott",
  "age" : 33
}, {
  "name" : "Scott",
  "location" : "London"
} ]

如果您想尝试一下生成的代码,可以看看this worksheet on Scastie(请记住,我没有在那里引入Spark依赖项,我不能100%确定这在SCastie中是否可以工作)。
正如您在上面链接的代码中所注意到的,您也可以只使用a ++ b来获得相同的结果,因此您不必从空数组开始。
另外,您可能希望将JValue重命名为不同的名称,以避免出现无法区分变量和JValue类型的奇怪错误。通常在Scala中,类型是大写的,而变量不是。但当然,要努力实现您的代码库的现有实践。

相关问题