【发布时间】:2015-04-22 17:52:28
【问题描述】:
我在运行以下 python 脚本时收到以下错误。
ValueError:无效控制字符位于:第 7591 行第 220620 列(字符 385678)
我对此进行了一些研究,似乎可以通过在 json.dumps() 中传递 'strict=false' 来解决它,但我仍然收到相同的错误。这是我尝试查询的唯一返回此错误的 REST 服务。
import arcgis
import json
from arcgis import ArcGIS
service = ArcGIS("http://mapping.dekalbcountyga.gov/arcgis/rest/services/LandUse/MapServer")
query = service.get(0, count_only=False)
json_query = json.dumps(query, strict=False)
f = open("dekalb_parcels.geojson", "w")
f.write(json_query)
f.close()
我们将不胜感激任何可以提供的帮助。谢谢。
更新 - 这是我收到的完整错误。
Traceback (most recent call last):
File "G:\Python\Scripts\dekalb_parcel_query.py", line 8, in <module>
query = service.get(0, count_only=False)
File "C:\Python27\lib\site-packages\arcgis\arcgis.py", line 146, in get
jsobj = self.get_json(layer, where, fields, count_only, srid)
File "C:\Python27\lib\site-packages\arcgis\arcgis.py", line 90, in get_json
return response.json()
File "C:\Python27\lib\site-packages\requests\models.py", line 802, in json
return json.loads(self.text, **kwargs)
File "C:\Python27\lib\json\__init__.py", line 338, in loads
return _default_decoder.decode(s)
File "C:\Python27\lib\json\decoder.py", line 366, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "C:\Python27\lib\json\decoder.py", line 382, in raw_decode
obj, end = self.scan_once(s, idx)
ValueError: Invalid control character at: line 7591 column 220620 (char 385678)
【问题讨论】:
-
当您要转储的字符串中有
\r或\n之类的转义序列时,通常会发生这种情况。 -
克劳斯,我相信你是对的。据我所知,传递 'strict=false' 应该忽略那些转义序列。但是,就我而言,它似乎无法纠正错误。除非我用错了。
-
strict参数在解析 JSON 时可用,在序列化时不可用。 -
我明白了,那么我该如何避免这个错误呢?我也尝试过像这样更改代码,'json_query = json.dumps(query.replace('\r\n', '\\r\\n'))' 以便手动转义它们。请原谅我的无知,因为我是一个相当新手的程序员。
标签: python json python-2.7 gis arcgis