json4s解析返回null

时间:2018-07-05 16:32:46

标签: scala json4s

我正在尝试使用Scala中的json4s从嵌套JSON获得价值。 对于手动提供的字符串,parse方法效果很好,但从文件提供的字符串为null。 这是代码

import org.json4s.jackson.JsonMethods.{parse, pretty}
import scala.io.Source

object ParseJson4s {
  def map_fields(lines: String) = {
    val testString = """{"Information":{"Context":"firstContext", "Assets":{"Asset":{"Name":"firstName"}}}}"""
    val parseJSON_test = parse(testString)
    val parseJSON = parse(lines)

    println("Name from method " + pretty(parseJSON_test \ "Information" \ "Assets" \ "Asset" \ "Name"))
    println("Name from file " + pretty(parseJSON \ "Information" \ "Assets" \ "Asset" \ "Name"))
  }
  def main(args: Array[String]): Unit = {
    val file = Source.fromFile("testFile.txt").getLines()
    file.foreach(map_fields)
  }
}

这是测试文件

"""{"Information":{"Context":"firstContext", "Assets":{"Asset":{"Name":"firstName"}}}}"""
"""{"Information":{"Context":"secondContext", "Assets":{"Asset":{"Name":"secondName"}}}}"""

输出:

Name from method "firstName"
Name from file 
Name from method "firstName"
Name from file 

谢谢

3 个答案:

答案 0 :(得分:0)

"""是否是文本文件中JSON记录的要求?我删除了它们,对我有用。

我进入控制台的结果:

Name from file "firstName" 
Name from file "secondName"

源代码:

import org.json4s.jackson.JsonMethods.{parse, pretty}
import scala.io.Source

object Json4sTest {
  def map_fields(lines: String) = {
    val parseJSON = parse(lines)
    println("Name from file " + pretty(parseJSON \ "Information" \ "Assets" \ "Asset" \ "Name"))
  }
  def main(args: Array[String]): Unit = {
    val file = Source.fromFile("testFile.txt").getLines()
    file.foreach(map_fields)
  }
}

testFile.txt:

{"Information":{"Context":"firstContext", "Assets":{"Asset":{"Name":"firstName"}}}}
{"Information":{"Context":"secondContext", "Assets":{"Asset":{"Name":"secondName"}}}}

答案 1 :(得分:0)

失败的原因是因为文件中的行不是有效的JSON字符串。 JSON字符串不能以三引号或双引号开头,除非它只是简单的字符串。

Scala中的

三引号(""")用于创建多行字符串和其中包含引号的字符串。仅在在Scala中定义字符串文字(硬代码字符串)时才需要使用它们。

因此,从文件中的行中删除三引号,它应该会为您提供正确的结果。

答案 2 :(得分:-1)

尝试使用jsoniter-scala从文件中进行解析,它将清楚地报告问题的位置和原因。

https://github.com/plokhotnyuk/jsoniter-scala