我有我的 Apache Flink 程序:
import org.apache.flink.api.scala._
import scala.util.parsing.json._
object numHits extends App {
val env = ExecutionEnvironment.getExecutionEnvironment
val data=env.readTextFile("file:///path/to/json/file")
val j=data.map { x => ("\"\"\""+x+"\"\"\"") }
/*1*/ println( ((j.first(1).collect())(0)).getClass() )
/*2*/ println( ((j.first(1).collect())(0)) )
/*3*/ println( JSON.parseFull((j.first(1).collect())(0)) )
}
我想将输入 JSON 文件解析为普通的 scala Map,为此我使用默认的 scala.util.parsing.json._
库。
第一个println
语句的输出是JSON解析函数所需的class java.lang.String
。
第二个 println
函数的输出是附加了 "\"\"\""
的实际 JSON 字符串,这也是 JSON 解析器所需要的。
现在,如果我复制控制台中打印的第二个 println
命令的输出并将其传递给 JSON.parseFull()
函数,它会正确解析它。
因此,第三个 println
函数应该正确解析传递给它的相同字符串,但它没有正确解析,因为它输出“None”字符串,这意味着它失败了。
为什么会发生这种情况以及如何让它发挥作用?
最佳答案
Output of the second println function is the actual JSON string appended and prepended by "\"\"\"" which is also required by the JSON parser.
不,当然不是。这会生成一个类似于 """{}"""
的字符串,它不是有效的 JSON,并且会被解析器正确拒绝。当您在 Scala 代码中编写 """{}"""
时,引号不是字符串本身的一部分,它们只是分隔文字:字符串的内容是 {}
,这是有效的 JSON。
关于java - Scala 的 JSON 库无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36886644/