【问题标题】:How to extract keys from nested JSON如何从嵌套的 JSON 中提取密钥
【发布时间】:2019-09-01 22:49:18
【问题描述】:

我想使用 spark 从嵌套的 json 中提取键。

我有以下 JSON

{
    "predicates": {
        "API_No": "http://www.oilandgas.com/api_no",
        "Facility_ID": "http://www.oilandgas.com/facility_id"
    },
    "prefixes": {
        "API_No": "http://www.oilandgas.com/api_no/ ",
        "Facility_ID": "http://www.oilandgas.com/facility_id/ "
    },
    "relations": {
        "API_No": [
            "Facility_ID",
            "County"
        ]
    },
    "grahName": "http://www.oilandgas.com/data"
}

我在下面写的代码读取json

val df = spark.read.option("multiline", "true").json("path/to/above/json")
df.select(explode(array(col("relations")))).columns.foreach(println)

我想从数据框中获取“关系”中的密钥作为“API_No”。

提前致谢。

【问题讨论】:

  • 您能否通过详细说明要求来澄清一下?或者你能指定你想要的输出吗?
  • 打印语句打印了什么?
  • 打印语句正在打印'col'
  • @VihitShah 我想把所有的键都放在嵌套的 json 中,比如 'API_No' 里面的 'relations' 。在上面的示例中,只有一个键,如果有多个键,则其结果为 Array("API_No") 则 Array("API_No", .....)
  • 答案似乎是正确的......对吧!? @JoshiSrikanthRao

标签: scala apache-spark


【解决方案1】:

要从数据框中将relations 中的密钥作为API_No 获取,您只需投影(选择)relations 密钥。由于relations 键的类型是struct,通过投影它可以得到想要的结果。像下面这样:

df.select("relations.*").columns.foreach(println)

它会给出以下结果:

API_No

希望对你有帮助!

【讨论】:

  • 我想在不使用“API_No”的情况下获取嵌套 json 中的键数组,如上例中的 Array("API_No")
  • 编辑了我的答案。只需将API_No 替换为* 即可获取所有密钥。
猜你喜欢
  • 1970-01-01
  • 2020-11-28
  • 1970-01-01
  • 2017-01-29
  • 2023-03-11
  • 2020-06-22
  • 1970-01-01
  • 2018-12-30
  • 1970-01-01
相关资源
最近更新 更多