Scala中不是JSON对象异常

时间:2016-12-07 17:51:06

标签: java json scala parsing

参考以下帖子中的回答:Find the maximum value from JSON data in Scala

我对Scala编程非常陌生,正如上面提到的一篇解决方案所述,我正在测试以下代码:

import collection.immutable.IndexedSeq
import com.google.gson.Gson
import com.google.gson.JsonObject
import com.google.gson.JsonParser

case class wrapperObject(val json_string: Array[MyJsonObject])
case class MyJsonObject(val id:Int ,val price:Int)

object Demo {

    val gson = new Gson()
    def main(args: Array[String])={
    val json_string = scala.io.Source.fromFile("jsonData.txt").getLines.mkString
    //val json_string= """{"json_string":[{"id":1,"price":4629},{"id":2,"price":7126},{"id":3,"price":8862},{"id":4,"price":8999},{"id":5,"price":1095}]}"""
    val jsonStringAsObject= new JsonParser().parse(json_string).getAsJsonObject
    val objectThatYouCanPlayWith:wrapperObject = gson.fromJson(jsonStringAsObject, classOf[wrapperObject])
    var maxPrice:Int = 0
    for(i <- objectThatYouCanPlayWith.json_string if i.price>maxPrice) 
    {
        maxPrice=  i.price
    }
    println(maxPrice)
}
}

我在第15行遇到以下错误.java.lang.IllegalStateException:不是JSON对象:

JSON文件的内容如下:

[{ "id":978,"price":2513},
{ "id":979,"price":8942},
{ "id":980,"price":1268},
{ "id":981,"price":5452},
{ "id":982,"price":5585},
{ "id":983,"price":9542}]

不确定此错误出现的原因。任何帮助,将不胜感激。谢谢。

1 个答案:

答案 0 :(得分:1)

您的JSON文件不是有效的JSON格式。根据您使用wrapperObject实现的逻辑,您的文件应如下所示:

{
    "json_string": [
        { "id":978,"price":2513},
        { "id":979,"price":8942},
        { "id":980,"price":1268},
        { "id":981,"price":5452},
        { "id":982,"price":5585},
        { "id":983,"price":9542}
    ]
}

然后将输出9542。请注意,您注释掉的json_string版本实际上是有效的,输出结果为8999

JSON格式是属性值对,但您的文件只有值 - Array[MyJsonObject]。根据您的wrapperObject案例类,json_string是属性,Gson需要将数据解析为wrapperObject类型的对象。