在 Python 中从 JSON 字符串中提取数据时出错(使用 Redshift)

Posted

技术标签:

【中文标题】在 Python 中从 JSON 字符串中提取数据时出错(使用 Redshift)【英文标题】:Error when extract data from JSON string in Python (using Redshift) 【发布时间】:2018-10-18 07:14:19 【问题描述】:

我正在尝试使用 Python 中的 SQL 从 JSON 字符串中提取数据。我收到一个错误

IndexError: tuple index out of range

下面是我正在尝试的示例查询

dwh_cursor.execute(sql.SQL("""SELECT a.id, a.name,B.setup as setup,
         CASE WHEN (setup::JSON -> 'refcol')::TEXT = '' THEN 'data_missing'
         ELSE 'data_correct' END AS ColumnMapping
         FROM sales a join details b on a.sale_id = b.id 
        and a.name = """).format(sql.Literal(name)))

如果我排除了从 JSON 中提取数据的最后一个表达式,上述查询运行良好。仅当我包含此 JSON 提取列(列名称:ColumnMapping)时,才会引发错误。任何人都可以指导如何解决这个问题。

我正在使用 Redshift 数据库。谢谢

【问题讨论】:

有两对大括号,但只有一个 format() 参数。 @KlausD.,感谢您的回复。第一个大括号检查空值。这种情况怎么办。 '' 作为第一个参数添加到format() 【参考方案1】:

如果您只想格式化 的后一个匹配项,请使用'' 转义第一个匹配项。

dwh_cursor.execute(sql.SQL("""SELECT a.id, a.name,B.setup as setup,
     CASE WHEN (setup::JSON -> 'refcol')::TEXT = '' THEN 'data_missing'
     ELSE 'data_correct' END AS ColumnMapping
     FROM sales a join details b on a.sale_id = b.id 
    and a.name = """).format(sql.Literal(name)))

【讨论】:

感谢您的回复。这里的问题是第一个 是检查空值。在这种情况下我怎么能满足。

以上是关于在 Python 中从 JSON 字符串中提取数据时出错(使用 Redshift)的主要内容,如果未能解决你的问题,请参考以下文章

在 Python 中从数组中提取 JSON ID

在python中从多个JSON文件中提取信息到单个CSV文件

在 json 文档中没有指定键的 bigquery 中从 json 字符串中提取键和值

如何在 Swift 中从 alamofire 中提取数据? [复制]

在 PHP 中从 JSON 中提取数据失败

在 Flutter/Dart 中从 JSON 数组中提取数据