json4s parse return null - PullRequest
       8

json4s parse return null

0 голосов
/ 05 июля 2018

Я пытаюсь получить значение из вложенного JSON, используя json4s в Scala. Метод parse работает хорошо для строки, предоставленной вручную, но нуль для строки, предоставленной из файла. Вот код

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 голосов
/ 05 июля 2018

Является ли """ обязательным для записей 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"}}}}
0 голосов
/ 06 июля 2018

Причина сбоя заключается в том, что строки в файле не являются допустимыми строками JSON. Строка JSON не может начинаться с тройных кавычек или кавычек, если только это не простая строка.

Тройная кавычка (""") в scala используется для создания многострочных строк и строк, содержащих внутри них кавычки. Их нужно использовать только при определении строковых литералов (строк с жестким кодом) в scala.

Итак, удалите тройные кавычки из строк в файле, и это должно дать вам надлежащие результаты.

0 голосов
/ 05 июля 2018

Попробуйте разобрать файл с помощью jsoniter-scala, он четко сообщит о местонахождении и причине проблемы.

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

...