首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >scala json解析并获得嵌套的键和值。

scala json解析并获得嵌套的键和值。
EN

Stack Overflow用户
提问于 2018-10-03 10:58:23
回答 1查看 1.2K关注 0票数 0

我有个像下面这样的人,

我有像下面这样的json,我需要从它们中提取值

代码语言:javascript
复制
{
    "filed1": "value1",
    "message": {
        "payload": [{
            "type": ["Extra","ID"],
             info": {
                "value": 8
            }
        }, {
            "type": ["Free"],
            info": {
                "value": 99
            }
        }, {
            "type": ["Actual"],
             info": {
                "value": 100
            }
        }]
    },
    "code": "0000"
}


{
    "filed1": "value1",
    "message": {
        "payload": [{
            "type": ["Extra", "new"],
            "value": 9
        }]
    },
    "code": "0001"
}

来自以上两种类型的json。

如果输入json有类型键的列表,那么查找类型字段,其中包含元素额外的,并获取内部信息的值。

如果输入json有一个类型的键,那么检查类型字段,如果它有元素额外的并得到直接的va;ue。

我正在尝试类似于下面的类型,但是对于json类型的列表,即第一个json输入失败。

代码语言:javascript
复制
import org.json4s._
import org.json4s.jackson.JsonMethods._
import org.json4s.JsonDSL._

val json = parse(myjsonString, true)
val field = compact(render(json \\ "type"))

val ok = field.contains("[\"Extra\"")

if(ok == true){
println("value " +  compact(render(json \\ "value")))
}
EN

回答 1

Stack Overflow用户

发布于 2018-10-03 16:07:41

您需要使用json4s来完成您的工作。具体来说,您需要在extract上使用json方法将其转换为特定的数据结构。完成之后,您可以将其处理为Scala类型。

这是我试图将JSON的结构与Scala案例类匹配起来的尝试:

代码语言:javascript
复制
case class PayloadInfo(value: Int)
case class Payload(`type`: List[String], info: PayloadInfo)
case class Message(payload: List[Payload])
case class Full(filed1: String, message: Message, code: String)

implicit val formats = DefaultFormats

val json = parse(myjsonString, true)

val full = json.extract[Full]

val res = full.message.payload.filter(_.`type`.contains("Extra"))

因为type是一个保留字,所以它周围的回标是必需的。

我可能把类型搞错了,但这应该让你知道该怎么做。

您也可以直接处理JValue,但这将变得更加混乱。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52625556

复制
相关文章

相似问题

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