如何用Python生成含单个转义斜杠的JSON文件以适配BigQuery Geography类型导入
如何用Python生成含单个转义斜杠的JSON文件以适配BigQuery Geography类型导入
嘿,我完全懂你遇到的麻烦——手动加转义斜杠反而出现双斜杠,这其实是json模块的自动转义机制在起作用!咱们一步步搞定这个适配BigQuery Geography类型的问题。
问题根源
你之前的做法是把geometry对象转成普通字符串后手动替换引号,但json.dumps在序列化的时候,会把你手动加的\再转义一次,变成\\,所以最终输出就出现了双斜杠。正确的思路应该是让json模块帮我们完成正确的转义,而不是手动干预。
正确解决方案
核心逻辑是:先把geometry对象序列化为标准JSON字符串,再将这个字符串作为值存入feature,最后由外层的json序列化处理转义,这样就能得到单个斜杠的正确格式。
给你对应原始GeoJSON数据的完整代码示例:
import json # 1. 读取原始GeoJSON数据(如果是从API获取的,直接用返回的JSON对象即可) with open('original.geojson', 'r', encoding='utf-8') as f: raw_data = json.load(f) # 2. 遍历处理每个Feature processed_features = [] for feat in raw_data['features']: # 将geometry对象序列化为合法的JSON字符串 geometry_str = json.dumps(feat['geometry']) # 构建新的Feature,把geometry替换为字符串格式 new_feature = { "type": feat["type"], "geometry": geometry_str, "properties": feat["properties"] } processed_features.append(new_feature) # 3. 构建处理后的FeatureCollection processed_data = { "type": "FeatureCollection", "features": processed_features } # 4. 写入目标JSON文件 with open('for_bigquery.geojson', 'w', encoding='utf-8') as f: # indent=2让输出更易读,不需要的话可以去掉 json.dump(processed_data, f, ensure_ascii=False, indent=2)
为什么这个方法有效?
json.dumps(feat['geometry'])会把geometry对象转换成标准的JSON字符串(比如{"type": "LineString", "coordinates": [...]}),这一步完全符合JSON格式规范。- 当外层的
json.dump处理整个数据时,会自动识别geometry字段的字符串值,将其中的双引号转义为\"——这正是BigQuery Geography类型需要的单转义格式,不会出现多余的斜杠。
如果你需要NDJSON格式(每行一个Feature)
BigQuery也支持导入NDJSON格式,处理代码可以改成这样:
with open('for_bigquery.ndjson', 'w', encoding='utf-8') as f: for feat in processed_features: f.write(json.dumps(feat, ensure_ascii=False) + '\n')
这样每行一个Feature,同样能被BigQuery正确识别。
备注:内容来源于stack exchange,提问作者Pete
相关产品推荐
相关产品推荐

