You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.20 11:15:28