Преобразовать строку в словарь
Есть строка:
a = '{"result":true,"data":{"*|Free_Wi-Fi":[{"time":"2019-12-30 21:11:25","bssid":"D8:0D:17:66:F3:82","essid":"FREE_Wi-Fi","sec":"WPA2","key":"Darth675Maul","wps":"65407493","lat":58.00143433,"lon":56.26366043},{"time":"2019-11-04 19:52:40","bssid":"CC:2D:E0:B5:51:CB","essid":"Free_Wi-Fi","sec":"None","key":"<empty>","wps":"","lat":51.29990768,"lon":9.49081039},{"time":"2019-10-26 22:46:34","bssid":"44:94:FC:7C:7B:E2","essid":"FREE_WI-FI","sec":"WPA2","key":"Evstigneev53","wps":"24519595","lat":56.31733322,"lon":43.86706161},{"time":"2019-10-24 14:39:25","bssid":"60:A4:4C:A2:4A:70","essid":"Free_wi-fi","sec":"WPA\/WPA2","key":"000000001","wps":"86410403","lat":48.45289993,"lon":135.11502075},{"time":"2019-08-02 20:29:47","bssid":"","essid":"Free_Wi-Fi","sec":"WPA\/WPA2","key":"12345678","wps":""},{"time":"2019-07-29 00:37:16","bssid":"C0:25:E9:82:2A:24","essid":"Free_Wi-Fi","sec":"WPA2","key":"00008888","wps":"","lat":46.40077209,"lon":30.72548294},{"time":"2019-07-08 01:26:43","bssid":"D4:BF:7F:31:BE:FA","essid":"Free_Wi-Fi","sec":"WPA2","key":"Upvel123","wps":"32601541","lat":55.73786926,"lon":37.70383835},{"time":"2019-01-11 07:58:51","bssid":"84:C9:B2:52:E2:E3","essid":"Free_Wi-fi","sec":"WPA","key":"9658213566","wps":"14647376","lat":55.07335663,"lon":82.93778992},{"time":"2018-11-14 20:32:24","bssid":"D4:6E:0E:97:23:A4","essid":"Free_wi-fi","sec":"WPA2","key":"89iguana89","wps":"65816899","lat":44.91734695,"lon":34.07199097},{"time":"2018-11-06 13:00:33","bssid":"28:28:5D:68:23:A0","essid":"Free_Wi-Fi","sec":"WPA2","key":"89105572444","wps":"69036040","lat":54.03311157,"lon":38.28345871}]},"time":0.038449048995972}'
Нужно преобразовать в словарь что-бы потом производить поиск по "key". Пробывал через eval(), не помогает, получаю ошибку:
Traceback (most recent call last):
File "3wifisearcher.py", line 14, in <module>
k = eval(k)
File "<string>", line 1, in <module>
NameError: name 'false' is not defined
Если вам не сложно то ещё подскажите как производить потом поиск.
Ответы (1 шт):
Автор решения: insolor
→ Ссылка
В строке не dict, а json (об этом говорит, в частности, true и false с маленькой буквы). Для декодирования в dict нужно использовать модуль json:
import json
a = '{"result":true,"data":{"*|Free_Wi-Fi":[]},"time": 0.038449048995972}'
decoded = json.loads(a)
Если это ответ с API какого-то сайта, полученный с помощью requests, то можно из ответа запроса брать не поле r.text, а вызвать метод r.json(), тогда сразу получите dict:
r = requests.post(...)
result = r.json()