【发布时间】:2017-04-20 00:46:57
【问题描述】:
我收到了大量 JSON 文件,我正在尝试将它们加载到 python 3.5 中
我已经做了一些清理工作,删除了双反斜杠和多余的引号,但是我遇到了一个我不知道如何解决的问题。
我正在运行以下代码:
with open(filepath,'r') as json_file:
reader = json_file.readlines()
for row in reader:
row = row.replace('\\', '')
row = row.replace('"{', '{')
row = row.replace('}"', '}')
response = json.loads(row)
for i in response:
responselist.append(i['ActionName'])
但是它抛出了错误:
JSONDecodeError: Expecting ',' delimiter: line 1 column 388833 (char 388832)
导致问题的 JSON 部分是下面的状态文本条目:
"StatusId":8,
"StatusIdString":"UnknownServiceError",
"StatusText":"u003cCompany docTypeu003d"Mobile.Tile" statusIdu003d"421" statusTextu003d"Start time of 11/30/2015 12:15:00 PM is more than 5 minutes in the past relative to the current time of 12/1/2015 12:27:01 AM." copyrightu003d"Copyright Company Inc." versionNumberu003d"7.3" createdDateu003d"2015-12-01T00:27:01Z" responseIdu003d"e74710c0-dc7c-42db-b608-bf905d95d153" /u003e",
"ActionName":"GetTrafficTile"
我添加了换行符来说明我的观点,看起来python很不高兴字符串包含双引号。
我感觉这可能与我将 '\ \' 替换为 '' 弄乱了字符串中的 unicode 字符有关。有没有办法修复这些嵌套的字符串?我不介意 StatusText 字段是否被完全删除,我所追求的只是 ActionName 字段的列表。
编辑: 我在这里托管了一个示例文件:
这与我收到的完全一样,在我替换多余的反斜杠和引号之前
这是一个包含一个错误条目的示例的精简版本
["{\"apiServerType\":0,\"RequestId\":\"52a65260-1637-4653-a496-7555a2386340\",\"StatusId\":0,\"StatusIdString\":\"Ok\",\"StatusText\":null,\"ActionName\":\"GetCameraImage\",\"Url\":\"http://mosi-prod.cloudapp.net/api/v1/GetCameraImage?AuthToken=vo*AB57XLptsKXf0AzKjf1MOgQ1hZ4BKipKgYl3uGew%7C&CameraId=13782\",\"Lat\":0.0,\"Lon\":0.0,\"iVendorId\":12561,\"iConsumerId\":2986897,\"iSliverId\":51846,\"UserId\":\"2986897\",\"HardwareId\":null,\"AuthToken\":\"vo*AB57XLptsKXf0AzKjf1MOgQ1hZ4BKipKgYl3uGew|\",\"RequestTime\":\"2015-12-01T00:00:42.5278699Z\",\"ResponseTime\":\"2015-12-01T00:01:02.5926127Z\",\"AppId\":null,\"HttpMethod\":\"GET\",\"RequestHeaders\":\"{\\\"Connection\\\":[\\\"keep-alive\\\"],\\\"Via\\\":[\\\"HTTP/1.1 nycnz01msp1ts10.wnsnet.attws.com\\\"],\\\"Accept\\\":[\\\"application/json\\\"],\\\"Accept-Encoding\\\":[\\\"gzip\\\",\\\"deflate\\\"],\\\"Accept-Language\\\":[\\\"en-us\\\"],\\\"Host\\\":[\\\"mosi-prod.cloudapp.net\\\"],\\\"User-Agent\\\":[\\\"Traffic/5.4.0\\\",\\\"CFNetwork/758.1.6\\\",\\\"Darwin/15.0.0\\\"]}\",\"RequestContentHeaders\":\"{}\",\"RequestContentBody\":\"\",\"ResponseBody\":null,\"ResponseContentHeaders\":\"{\\\"Content-Type\\\":[\\\"image/jpeg\\\"]}\",\"ResponseHeaders\":\"{}\",\"MiniProfilerJson\":null}"]
【问题讨论】:
-
如果它是 json,你不应该删除任何东西。如果你已经删除了反斜杠......不是那些用来转义现在给你带来问题的引号的反斜杠吗? json 是故意放入这些注释的。如果您最终不喜欢解码,则可能是向 json 编码器传递的任何内容中存在错误。
-
如何发布一个示例 json 文件以便我们自己查看。
-
我添加了一个指向我收到的文件示例的链接
-
我的答案中的代码是您正在寻找的,还是我误解了您的问题?
标签: json python-3.x double-quotes