【问题标题】:scala json parse and get a nested key and valuescala json 解析并获取嵌套的键和值
【发布时间】:2018-10-03 10:58:23
【问题描述】:

我有一个像下面这样的 json,

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

{
    "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 具有 type 键列表,则查找具有元素 Extra 的 type 字段并获取 info 中的值

如果输入 json 有一个 type 键,则检查 type 字段,如果它有元素 Extra 并获取直接值;ue

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

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")))
}

【问题讨论】:

    标签: scala jackson json4s


    【解决方案1】:

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

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

    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 周围的反引号是必需的,因为它是保留字]

    我可能把类型弄错了,但这应该让你知道如何去做。

    您也可以直接处理JValues,但这会更麻烦。

    【讨论】:

      猜你喜欢
      • 2016-07-12
      • 1970-01-01
      • 1970-01-01
      • 2018-10-06
      • 2020-10-08
      • 2019-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多