【问题标题】:How to search for a particular object value inside a nested JSON array?如何在嵌套的 JSON 数组中搜索特定的对象值?
【发布时间】:2021-12-05 03:35:57
【问题描述】:

我正在尝试选择在“员工”中找到的“员工”中具有“照片”的所有部分。如果他们没有“照片”,我不想选择此部分。有没有办法做到这一点?我在 SNOWFLAKE 中使用 SQL。

例如,我有这个 JSON:

 {
      "employees": {
        "employee": [
          {
            "id": "1",
            "firstName": "Tom",
            "lastName": "Cruise",
            "photo": "https://pbs.twimg.com/profile_images/735509975649378305/B81JwLT7.jpg"
          },
          {
            "id": "2",
            "firstName": "Maria",
            "lastName": "Sharapova"
          },
          {
            "id": "3",
            "firstName": "James",
            "lastName": "Bond"
          }
        ]
      }
    }

由于最后两个没有“PHOTO”,我不希望返回。所以对于上面的,它应该只返回:

      {
        "id": "1",
        "firstName": "Tom",
        "lastName": "Cruise",
        "photo": "https://pbs.twimg.com/profile_images/735509975649378305/B81JwLT7.jpg"
      }

【问题讨论】:

    标签: sql arrays json nested snowflake-cloud-data-platform


    【解决方案1】:
    SELECT e AS json
    FROM data_table t,
    LATERAL FLATTEN(input=>t.json:employees:employee) e,
    WHERE e.value:photo IS NOT NULL;
    

    【讨论】:

    • 谢谢!如果我在“照片”中有多个对象怎么办?这种方法行得通吗?
    • @user3461502 你说的标准是“如果它有照片就包括它”,因此如果“它有很多照片”仍然值得包括(又名而不是一个对象 {} 照片是数组[]) 那么当不为空时这仍然会很好吗?除非我错过了什么?
    【解决方案2】:

    您可以考虑选项 4。对于获得类似结果的更动态的方法,在元素的位置不确定的情况下,具有 unpivot 功能的横向展平可以很方便,在下面的文章中: https://community.snowflake.com/s/article/Dynamically-extracting-JSON-using-LATERAL-FLATTEN

    【讨论】:

      猜你喜欢
      • 2018-09-10
      • 1970-01-01
      • 2017-05-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-11
      • 1970-01-01
      • 2018-03-20
      相关资源
      最近更新 更多