Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Json Scala/Play:无法识别的令牌';非';:期待着';空'';正确'';假';还是楠_Json_Scala_Playframework - Fatal编程技术网

Json Scala/Play:无法识别的令牌';非';:期待着';空'';正确'';假';还是楠

Json Scala/Play:无法识别的令牌';非';:期待着';空'';正确'';假';还是楠,json,scala,playframework,Json,Scala,Playframework,我有一个Scala模型 case class Model( name: String, site: String, phones: Seq[String], duration: String, pricePerMonth: Double, address: String, benefits: Seq[String], rating: Int ) 对于json {

我有一个
Scala
模型

case class Model(
  name:          String,
  site:          String,
  phones:        Seq[String],
  duration:      String,
  pricePerMonth: Double,
  address:       String,
  benefits:      Seq[String],
  rating:        Int
)
对于json

{
  "name": "a",
  "site": "b",
  "phones": ["c"],
  "duration": "d",
  "price-per-month": 10.00,
  "address": "e",
  "benefits": ["f"],
  "rating": 1
}
以下是我的SBT依赖项:

"com.typesafe.play" %% "play-json" % "2.3.4"
我想使用Play解析json。这是我的代码:

val model = fromInputStream { getClass getResourceAsStream "/model.json"
                            } getLines() toString

val json: JsValue = Json.parse(model)
但我犯了个错误

Exception in thread "main" com.fasterxml.jackson.core.JsonParseException: Unrecognized token 'non': was expecting 'null', 'true', 'false' or NaN
 at [Source: java.io.StringReader@a7e666; line: 1, column: 4]
    at com.fasterxml.jackson.core.JsonParser._constructError(JsonParser.java:1524)
    at com.fasterxml.jackson.core.base.ParserMinimalBase._reportError(ParserMinimalBase.java:557)
    at com.fasterxml.jackson.core.json.ReaderBasedJsonParser._reportInvalidToken(ReaderBasedJsonParser.java:2042)
    at com.fasterxml.jackson.core.json.ReaderBasedJsonParser._reportInvalidToken(ReaderBasedJsonParser.java:2018)
    at com.fasterxml.jackson.core.json.ReaderBasedJsonParser._matchToken(ReaderBasedJsonParser.java:1870)
    at com.fasterxml.jackson.core.json.ReaderBasedJsonParser.nextToken(ReaderBasedJsonParser.java:657)
    at com.fasterxml.jackson.databind.ObjectMapper._initForReading(ObjectMapper.java:3031)
    at com.fasterxml.jackson.databind.ObjectMapper._readValue(ObjectMapper.java:2951)
    at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:1587)
    at play.api.libs.json.JacksonJson$.parseJsValue(JsValue.scala:486)
    at play.api.libs.json.Json$.parse(Json.scala:19)

有什么办法可以修复这个错误吗?

这对我很有效。从REP:

Welcome to Scala version 2.11.7 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_60).
Type in expressions to have them evaluated.
Type :help for more information.

scala> import play.api.libs.json._
import play.api.libs.json._

scala> val json = """
     | {
     |   "name": "a",
     |   "site": "b",
     |   "phones": ["c"],
     |   "duration": "d",
     |   "price-per-month": 10.00,
     |   "address": "e",
     |   "benefits": ["f"],
     |   "rating": 1
     | }
     | """
json: String =
"
{
  "name": "a",
  "site": "b",
  "phones": ["c"],
  "duration": "d",
  "price-per-month": 10.00,
  "address": "e",
  "benefits": ["f"],
  "rating": 1
}
"

scala> Json.parse(json)
res0: play.api.libs.json.JsValue = {"name":"a","site":"b","phones":["c"],"duration":"d","price-per-month":10,"address":"e","benefits":["f"],"rating":1}
因此,问题可能来自您的方法:

val model = fromInputStream { getClass getResourceAsStream "/model.json" } getLines() toString

这对我有用。从REP:

Welcome to Scala version 2.11.7 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_60).
Type in expressions to have them evaluated.
Type :help for more information.

scala> import play.api.libs.json._
import play.api.libs.json._

scala> val json = """
     | {
     |   "name": "a",
     |   "site": "b",
     |   "phones": ["c"],
     |   "duration": "d",
     |   "price-per-month": 10.00,
     |   "address": "e",
     |   "benefits": ["f"],
     |   "rating": 1
     | }
     | """
json: String =
"
{
  "name": "a",
  "site": "b",
  "phones": ["c"],
  "duration": "d",
  "price-per-month": 10.00,
  "address": "e",
  "benefits": ["f"],
  "rating": 1
}
"

scala> Json.parse(json)
res0: play.api.libs.json.JsValue = {"name":"a","site":"b","phones":["c"],"duration":"d","price-per-month":10,"address":"e","benefits":["f"],"rating":1}
因此,问题可能来自您的方法:

val model = fromInputStream { getClass getResourceAsStream "/model.json" } getLines() toString

给Json.parse的
model
的值到底是多少。使用调试器或简单的println,我敢打赌你会很快发现你的JSON有什么问题,以及Jackson为什么会崩溃。model.JSON的实际内容是什么?我找到了错误的原因。我需要使用
mkString
而不是
getLines().toString()
来实际生成一个字符串,但不是迭代器。Json.parse的
model
值到底是多少。使用调试器或简单的println,我敢打赌你会很快发现你的JSON有什么问题,以及Jackson为什么会崩溃。model.JSON的实际内容是什么?我找到了错误的原因。我需要使用
mkString
而不是
getLines().toString()
来实际生成一个字符串,而不是迭代器。