首页 > 解决方案 > 如何在 scala 中解析 json

问题描述

我有火花流作业,它通过 json4s 解析 kafka 流记录 json,但有一种情况我不知道如何处理。每个 json 的每个处理的地图都是这样的:

Map(new_userid -> 70048837, target_type -> category, deviceid -> 70f817d51b321217_afa3673c0804, click_url -> , platform -> android_app, page_section -> List(category_switch_bar), click_location -> )

看看 page_section,这不是我需要的,我想要的结果是:page_section -> "category_switch_bar",但是 page_section 是一个只有一个元素或 None 的列表。我这样编码:

val pageSection=  record.getOrElse("page_section", "")

但很明显这是不对的。我如何收集它?

标签: jsonscalaspark-streaming

解决方案


根据您的 json 示例page_section确实是一个 JSON 列表,因此它被合理地反序列化为 Scala 列表。如果您确定它始终是一个或零个元素列表,并且您愿意将其转换为案例类而不是 Map,则可以使用 customFieldSerializer将转换JArray为或者JString将成为一个字段JNull的案例类Option[String]

有关更多详细信息,请参阅 json4s 文档https://github.com/json4s/json4s#serializing-fields-of-a-class


推荐阅读