首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >玩Json解析器:如何在json解析器中忽略字段

玩Json解析器:如何在json解析器中忽略字段
EN

Stack Overflow用户
提问于 2018-04-19 17:25:09
回答 2查看 1.2K关注 0票数 0

我使用Scala和play JSON库来解析JSON。我们面临的问题是使用JSON解析是,我们有相同的JSON结构,但一些JSON文件包含不同的值结构,具有相同的键名。让我们举一个例子:

json-1

代码语言:javascript
复制
{
  "id": "123456",
  "name": "james",
  "company": {
    "name": "knoldus"
  }
} 

json-2

代码语言:javascript
复制
{
  "id": "123456",
  "name": "james",
  "company": [
    "knoldus"
  ]
} 

我的案例类

代码语言:javascript
复制
case class Company(name: String)
object Company{
  implicit val _ = Json.format[Company]
}

case class User(id: String, name: String, company: Company)
object User{
 implicit val _ = Json.format[Company]
}

虽然JSON包含带有JSON文档的公司,但我们正在成功地进行解析,但是如果company包含一个数组,则会得到解析异常。我们的需求是否存在,我们可以使用play JSON库而忽略字段,如果得到解析错误,则忽略整个JSON文件。如果我得到,公司数组值,忽略公司字段,并解析其余的,并映射相应的案例类。

EN

回答 2

Stack Overflow用户

发布于 2018-04-20 08:46:40

我会做一个预解析函数,将“坏”公司重命名。

参见教程以获得灵感:遍历a-JsValue-结构

因此,您的解析将工作,只要做这个小小的更改:

case class User(id: String, name: String, company: Option[Company])

company需要成为一种选择。

票数 1
EN

Stack Overflow用户

发布于 2018-04-21 06:48:15

最后,我们找到了解决这个问题的答案,众所周知,我们在JSON中有不同的公司结构,所以我们需要做的是,我们需要将company声明为一个JsValue,因为在任何情况下,无论公司结构是什么,它都很容易被分配给JsValue类型。在此之后,我们的需求是,我们需要使用对象结构,如果JSON包含数组结构,则忽略它。在此之后,我们使用模式匹配与我们公司的JsValue类型和一个成功和失败的基础,我们解析或JSON.的解决方案与代码如下:

代码语言:javascript
复制
case class Company(name: String)
object Company{
    implicit val _ = Json.format[Company]
}

case class User(id: String, name: String, company: JsValue)
object User{
    implicit val _ = Json.format[Company]
}

Json.parse("{ --- whatevery json--string --- }").validate[User].asOpt match {
    case Some(obj: JsObject) => obj.as[Company]
    case _ => Company("no-name")
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49926848

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档