Tableau循环处理字符串:拆分JSON数据生成计算字段遇阻
解决办法
基于SQL的方案(分数据库)
PostgreSQL
用json_array_elements把JSON数组拆成多行,再提取字段:
SELECT t.School, student->>'firstname' AS firstname, student->>'lastname' AS lastname FROM your_table t, json_array_elements(t.StudentJson::json) AS student;
如果你的StudentJson是jsonb类型,把json_array_elements换成jsonb_array_elements就行。
MySQL 8.0+
用JSON_TABLE函数解析JSON数组为行结构:
SELECT t.School, jt.firstname, jt.lastname FROM your_table t, JSON_TABLE( t.StudentJson, '$[*]' COLUMNS( firstname VARCHAR(50) PATH '$.firstname', lastname VARCHAR(50) PATH '$.lastname' ) ) jt;
基于Python Pandas的方案
如果是用Python处理表格数据,直接用json_normalize结合元数据提取就能搞定:
import pandas as pd # 假设你的数据已经在DataFrame df里 df_final = pd.json_normalize( df.to_dict('records'), record_path='StudentJson', # 指定要展开的JSON数组字段 meta=['School'] # 保留需要的原始字段 )[['School', 'firstname', 'lastname']]
如果你的StudentJson是字符串格式(不是已解析的JSON对象),先转一下:
import pandas as pd import json df['StudentJson'] = df['StudentJson'].apply(json.loads) df_final = pd.json_normalize( df.to_dict('records'), record_path='StudentJson', meta=['School'] )[['School', 'firstname', 'lastname']]
为啥你用forloop和split没成?
JSON是结构化数据,split只能做简单的字符串切割,没法识别JSON的键值对结构,一旦JSON里有空格、换行或者格式变动,直接分割就会乱;普通forloop如果没先把JSON解析成字典/对象,也没法准确拿到firstname和lastname。必须用专门的JSON解析工具,而不是硬拆字符串。
内容的提问来源于stack exchange,提问作者abe thetrader
相关产品推荐
相关产品推荐

