解析多行 Json - 数组而不是行

Posted

技术标签:

【中文标题】解析多行 Json - 数组而不是行【英文标题】:parse multiline Json - array instead of row 【发布时间】:2021-11-05 01:23:53 【问题描述】:

我有以下 json:

   
      "data": 
        "data2": [],
        "data3": [
          
            "info": 
              "test1": "value1",
              "test2": "value2"
            ,
            "info2": [
              
                "info": 
                  "test1": "value3",
                  "test2": "value4"
    ,
          
                "info": 
                  "test1": "value5",
                  "test2": "value6"
    
              
            ]
          
    ]

我需要将 info2.info.test1、info2.info.test2 提取到列中。 我已经在火花中解析了它,但我有一个数组列而不是单行:

df = json.select(
      explode("data.data3.info2").alias("json"),
).select(
       col("json.info.test1"),
       col("json.info.test2")
)

预期输出:

| test1    | test2          |
| -------- | -------------- |
| value3   | value4         |
| value5   | value6         |

【问题讨论】:

您能检查一下您提供的 JSON 文件吗?看起来它已经损坏了。顺便说一句,很高兴看到预期的输出。 您的 json 似乎是错误的,请您仔细检查一下并告知预期的输出如何? 我已添加更改,感谢 cmets。 【参考方案1】:

我的工作解决方案:

df = json.select(
      explode("data.data3.info2").alias("json"),
).select(
      explode("json.info").alias("info")
).select(
       col("info.test1"),
       col("info.test2")
)

【讨论】:

以上是关于解析多行 Json - 数组而不是行的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Android 中解析 JSON 数组(不是 Json 对象)

解析为对象而不是数组时出现Json错误:JSONObject中的getJSONObject(java.lang.String)无法应用于(int)

如何在 jQuery 中解析 JSON 数组?

雪花表中json数据的解析字段将多行插入到新的雪花表中

如何解析包含多个相同类型的 JSON 对象(不是数组)的 JSON 对象

流分析解析 json,相同的 key 可以是数组,也可以不是