在 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文件中提取信息到单个CSV文件
在 json 文档中没有指定键的 bigquery 中从 json 字符串中提取键和值