【发布时间】:2019-10-01 17:41:29
【问题描述】:
我正在尝试操作 Garmin zip 文件中的数据。该代码的工作原理是输出是此结构“{[{[{}]}]}”的字典中的嵌套列表字符串。
test.zip 文件内容为:
1f8b 0800 0000 0000 0013 ed90 5f4b c330
14c5 f751 429e 6b49 9a3f ad7d db60 f852
7d10 5144 6464 6d18 9959 529a 4419 c3ef
6ea6 55b6 a1f8 34c6 a0bf 3cdc 70ef e1dc
93d4 d678 697c ba74 d68c 8e04 4288 530a
b635 e76c af7e 42f2 1c60 c268 84a3 9c00
8469 46f8 08a0 6305 da25 382f ba18 6565
e74a cbbf 75ff cdbf 9e02 7eea 99b0 818d
f0e2 da36 52df cbce 296b 6089 13d8 8afa
452c e4dd ba95 bb6d 2356 1296 7032 be9d
568f b36a 7a35 ae60 027d 54c5 6e70 b27b
10eb d62a e35d 6cdb f952 d6f1 563e 6de0
ebb7 8909 5a27 07d2 ad20 04d5 1c7a cc70
74d1 c22b 1f9a b880 e334 639c a282 5f62
8a78 c6e2 d09a 453f bdc0 b448 8b8c 3084
59af 48e0 5b6f 75f3 4bee f7e7 784e fdfd
0303 0303 27e3 0325 2a3a 7200 0800 00
实际输出如下:
{"dataModelVersion":1,"packageTypeVersion":1,"name":"BARELY_LEGAL","type":"userWaypoints","objects":[{"version":null,"userWaypoints":[{"uuid":"userWaypoints_1","latitude":61.25640869140625,"longitude":-148.82350158691406,"waypointName":"BARELY_LEGAL"}]}]}
此输出使用在线验证器验证为 JSON,但是当我尝试访问数据时遇到 TypeErrors 问题,因为“final”的值是一个字符串。我的目标是从 JSON 对象访问键值,例如“名称”、“纬度”、“经度”。
代码是:
import re
import gzip
import json
with gzip.open('test.zip', 'rb') as f:
file_content = f.read()
content = (file_content.decode('utf-8'))
json_string = (re.sub(r'^.*?{', '{', content, flags=re.DOTALL))
data = json.dumps(json_string)
final = json.loads(data)
print(final)
【问题讨论】:
标签: python json dictionary nested