java - Scala 的 JSON 库无法正常工作

标签 java json scala parsing apache-flink

我有我的 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/

相关文章:

java - 转换Java中Optional.ofNullable().ifPresent()中的if else语句

javascript - 从 node.js 中的文件流中删除最后一个字符(fs 模块)

scala - Slick 的日志记录选项

scala - 如何在 Controller 中进行单元测试?

java - 使用 JDO 持久化/检索对象时 DataNucleus DAO 对象中的 ClassCastException

java - 是什么使得从静态初始化程序初始化对象引用以安全地发布对象?

java - 使用 selenium 和 java 进行多屏幕截图

c# - Json 到 C# 对象处理动态属性

php - 以 json 形式返回表行并打印

java.lang.NoSuchMethodError : . ....EventProcessor:找不到方法 <init>()V