参考以下帖子中的回答: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}]
不确定此错误出现的原因。任何帮助,将不胜感激。谢谢。
答案 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
类型的对象。