加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – 用Spray-json解析一个简单的数组

发布时间:2020-12-16 19:17:46 所属栏目:安全 来源:网络整理
导读:我正在尝试(并且失败)了解spray-json如何将json提要转换为对象.如果我有一个简单的密钥 – 值json feed然后它似乎工作正常,但我想要读取的数据来自这样的列表: [{ "name": "John","age": "30"},{ "name": "Tom","age": "25"}] 我的代码看起来像这样: packa
我正在尝试(并且失败)了解spray-json如何将json提要转换为对象.如果我有一个简单的密钥 – >值json feed然后它似乎工作正常,但我想要读取的数据来自这样的列表:

[{
    "name": "John","age": "30"
},{
    "name": "Tom","age": "25"
}]

我的代码看起来像这样:

package jsontest

import spray.json._
import DefaultJsonProtocol._

object JsonFun {

  case class Person(name: String,age: String)
  case class FriendList(items: List[Person])

  object FriendsProtocol extends DefaultJsonProtocol {
    implicit val personFormat = jsonFormat2(Person)
    implicit val friendListFormat = jsonFormat1(FriendList)
  }

  def main(args: Array[String]): Unit = {

    import FriendsProtocol._

    val input = scala.io.Source.fromFile("test.json")("UTF-8").mkString.parseJson

    val friendList = input.convertTo[FriendList]

    println(friendList)
  }

}

如果我更改我的测试文件,所以它只有一个人不在数组中并运行val friendList = input.convertTo [Person]然后它工作并且一切都解析但是一旦我尝试解析一个数组它失败并出现错误对象预期在字段’项目’

谁能指出我做错的方向?

解决方法

好吧,通常是在花费数小时试图让某些东西工作之后立即向StackOverflow发布内容后的方式,我已经设法让这个工作.

FriendsProtocol的正确实现是:

object FriendsProtocol extends DefaultJsonProtocol {
  implicit val personFormat = jsonFormat2(Person)
  implicit object friendListJsonFormat extends RootJsonFormat[FriendList] {
    def read(value: JsValue) = FriendList(value.convertTo[List[Person]])
    def write(f: FriendList) = ???
  } 
}

告诉Spray如何读/写(只是在我的情况下读)列表对象足以让它工作.

希望能帮助别人!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读