Python读取JSON文件报错'str'无decode属性,如何转GeoDataFrame
问题解决方法
报错原因
- Python 3下使用
r文本模式打开文件时,读取返回的内容已经是解码后的字符串类型,仅字节(bytes)类型对象拥有decode()方法,对字符串调用该方法就会触发AttributeError: 'str' object has no attribute 'decode'报错 - 原有代码还存在其他逻辑问题:第一种写法中
file_path被赋值为文件对象而非路径字符串,且逐行读取JSON内容无法被json.load正常解析;第二种写法错误传入文件对象作为open()的路径参数。
正确实现方案
要将GeoJSON转为GeoPandas DataFrame,有两种可行写法,推荐使用第二种原生方法更简洁:
方案1:手动读取JSON后转换
import os import json import geopandas as gpd # 正确拼接文件路径,避免不同操作系统路径分隔符问题 file_path = os.path.join(os.getcwd(), "data/map/us_county/gz_2010_us_050_00_500k.json") # 文本模式读取,无需手动解码 with open(file_path, 'r', encoding='utf-8') as f: geojson_content = json.load(f) # 从GeoJSON的features字段生成GeoDataFrame gpd_county = gpd.GeoDataFrame.from_features(geojson_content["features"]) # 可选:设置坐标系,该数据集默认是WGS84坐标系(EPSG:4326) gpd_county.crs = "EPSG:4326"
方案2:GeoPandas原生直接读取(推荐)
GeoPandas内置了GeoJSON文件读取能力,无需手动处理文件IO和JSON解析:
import os import geopandas as gpd file_path = os.path.join(os.getcwd(), "data/map/us_county/gz_2010_us_050_00_500k.json") gpd_county = gpd.read_file(file_path)
结果验证
执行完成后可运行以下代码查看前5行数据,确认转换成功:
print(gpd_county.head())
内容的提问来源于stack exchange,提问作者kms
相关产品推荐
相关产品推荐

