我正在尝试将此json字符串传递给我的其他方法,但有时会出现此错误,
play.api.libs.json.JsResultException: JsResultException(错误:列表((,列表(ValidationError(error.expected.jsstring,WrappedArray())))))
我觉得奇怪的是,这是随机发生的,有时候我不会得到例外,有时我会这样做。有什么想法吗?
这是我的json的样子
val string = {
"first_name" : {
"type" : "String",
"value" : "John"
},
"id" : {
"type" : "String",
"value" : "123456789"
},
"last_name" : {
"type" : "String",
"value" : "Smith"
}
}
我读它就像
(string \ "first_name").as[String]
答案 0 :(得分:3)
(string \ "first_name")
为JsValue
提供JsString
,因此as[String]
不起作用。
但如果你需要first name value
,你可以做
val firstName = ((json \ "first_name") \ "value").as[String]
答案 1 :(得分:0)
这是在使用play Json API读写Json时要考虑类型安全的另一种选择。下面我展示了使用您的json作为示例阅读部分,并且写作类似。
将数据表示为案例类。
case Person(id:Map[String,String], firstName:Map[String,String], lastName:[String,String]
为案例类写隐式读/写。
implicit val PersonReads: Reads[Person]
Employ播放组合器读取的API。将隐式导入您在其中读取json的位置,然后返回Person对象。下图是插图。
val personObj = Json.fromJson[Person](json)
请在这里https://www.playframework.com/documentation/2.6.x/ScalaJsonAutomated
答案 2 :(得分:-2)
首先,您无法遍历 String 对象,因此您的输入必须转换为 JsValue 才能遍历它:
val json = Json.parse(string)
那么 first_name 属性是 JsValue 类型而不是字符串所以如果您尝试提取 first_name 像你这样的价值,你会得到一个 JsResultException 。
我只能通过 first_name 字段json结构中的radom更改来解释 JsResultException 的随机外观。使你的sting输入到traverse始终是一个固定的 first_name 字段结构。