json - 从spark中的json中的数组中提取Json
问题描述
我有一个复杂的 JSON 列,其结构是:
故事{卡片:[{故事元素:[{...}{...}{...}}]}
故事元素的长度是可变的。我需要从故事元素数组中提取一个特定的 JSON 块。为此,我首先需要提取故事元素。
这是我尝试过的代码,但它给出了错误:
import org.json4s.{DefaultFormats, MappingException}
import org.json4s.jackson.JsonMethods._
import org.apache.spark.sql.functions._
def getJsonContent(jsonstring: String): (String) = {
implicit val formats = DefaultFormats
val parsedJson = parse(jsonstring)
val value1 = (parsedJson\"cards"\"story-elements").extract[String]
value1
}
val getJsonContentUDF = udf((jsonstring: String) =>
getJsonContent(jsonstring))
input.withColumn("cards",getJsonContentUDF(input("storyDataFrame")))
解决方案
根据您提供的 json,story-elements
是一个 json 对象数组,但您试图将数组提取为字符串((parsedJson\"cards"\"story-elements").extract[String]
)。
您可以创建代表故事的案例类(例如case class Story(description: String, pageUrl: String, ...)
),然后代替extract[String]
,尝试extract[List[Story]]
或extract[Array[Story]]
List[String]
推荐阅读
- android - 错误:找不到 com.google.gms.google-services:4.2.0
- javascript - 我可以同时在本地模拟云功能和托管吗?
- ios - Firebase Analytics - 禁用,从自动跟踪中排除某些屏幕。IOS
- reactjs - 使用 react-native-print 时如何设置 HTML 样式
- jquery - $('#dlg').dialog('close') 不适用于简单的 JSP 页面
- python - 列表到熊猫字典?
- ios - 如何为 iOS 项目设置 GitLab CI
- c# - Asp Net Core 2.2 项目不能使用类核心库目标 2.2
- php - 如何让用户上传文件到服务器
- python - python中的属性错误。对象没有属性