如何转换包含 json 对象数组的输入 json 字符串中的数据

问题描述 投票:0回答:1

第一次发帖,用 Scala 学习 Spark 编码:

我有一个输入 json 字符串,其中包含 json 字符串数组。例如 { “交货证明”: { "POD_TYPE_CD": "P", “LD_REFS”:[ { "REF_NBR": "14272260", "REF_DSC": "描述111" }, { "REF_NBR": "34234371", “REF_DSC”:“” }, { "REF_NBR": "1 - 初始拾取", "REF_DSC": "停止订单" } ] } } 我想用 null 替换所有出现的空字符串。所以上面出现了一次空字符串,应该用 null 替换。我知道如何使用“普通”列(例如上面的 POD_TYPE_CD)执行此操作,但是如何对数组内的字段执行此操作?总而言之,我不想更改任何值,基本上我的输入将成为输出,但所有空字符串都需要为空(所以在上面,它将是 "REF_DSC":null )

任何建议或指导都会很棒!

我尝试使用爆炸,我尝试了地图,但它们都不起作用,而且我还没有很好地了解它是如何工作的。我在上面描述了我期望的输出是什么样子。

arrays json spark-structured-streaming
1个回答
0
投票

通过结合人们的其他帖子,我能够弄清楚: 首先,通过使用此命令,我能够从输入中获取 json 字符串: .withColumn("LD_REFS", (get_json_object(to_json(col("record.proofOfDelivery")), "$.LD_REFS")).cast("string"))

然后通过使用以下内容,我能够首先用 null 替换所有空字符串,然后将其转回结构化数组(这样输出看起来与输入相同,只不过不是空字符串而是 null)

val updateDF=inputDF .withColumn("LD_REFS", regexp_replace(col("LD_REFS"),"""","null")) .withColumn("LD_REFS", from_json(col("LD_REFS"), ArrayType(new StructType().add("REF_DSC",StringType).add("REF_NBR",StringType))))

我的输出看起来像这样 “LD_REFS”:[ { “REF_DSC”:空, "REF_NBR": "14272260" }, { “REF_DSC”:空, “REF_NBR”:“34234371” }, { "REF_DSC": "止损订单", "REF_NBR": "1 - 初始拾取" }, { "REF_DSC": "联运集团(旧)ID", “REF_NBR”:“3114762” } ]

© www.soinside.com 2019 - 2024. All rights reserved.