首页 > 解决方案 > 无法将 dicts 字符串加载到 JSON 中

问题描述

import requests
import re
import json

def parser(code):
    params = {
        'template': 'professional',
        'level': 'search',
        'search': code
    }
    r = requests.get("https://maps.locations.husqvarna.com/api/getAsyncLocations",
                params=params).json()
    goal = re.search(r'({.+})', r['maplist'], re.M | re.DOTALL).group(1)
    print(goal)


parser("35801")    

代码将返回一个未包装string的。dicts我试图倾倒/装载并将其包裹在其中,[ ]但由于奇怪的原因它仍然是string

标签: pythonjsondictionary

解决方案


您需要手动将目标转换为列表,以接收 Python 对象:

import requests
import re
import json

def parser(code):
    params = {
        'template': 'professional',
        'level': 'search',
        'search': code
    }
    r = requests.get("https://maps.locations.husqvarna.com/api/getAsyncLocations",
                params=params).json()
    goal = re.search(r'({.+})', r['maplist'], re.M | re.DOTALL).group(1)
    jsonList = '[%s]' % goal  # Make proper json list!
    items = json.loads(jsonList)
    
    for item in items:
        print(item)

parser("35801")

出去:

{'fid': 'USF221344-2115METROCIRCLE', 'lid': '56063', 'lat': '34.7004049', 'lng': '-86.5924508', 'url': 'https://locations.husqvarna.com/al/huntsville/product-manufacturer-usf221344-2115metrocircle.html', 'country': 'US', 'url_slug': 'product-manufacturer-usf221344-2115metrocircle.html', 'location_name': 'HEDDEN LAWN & GARDEN', 'address_1': '2115 METRO CIRCLE', 'address_2': '', 'city': 'HUNTSVILLE', 'city_clean': 'huntsville', 'region': 'AL', 'region_lc': 'al', 'post_code': '35801', 'local_phone': '(256) 885-1750', 'local_phone_pn_dashes': '256-885-1750', 'local_fax': '', 'local_fax_pn_dashes': '', 'from_email': '', 'hours_timezone': '', 'hours_dst': '', 'distance': '2.2', 'hours_sets:primary': '{"label":"Primary Hours","name":"primary","type":"0","timezone":"-6","dst":"1"}', 'Store Type_CS': 'Buy,Service', 'Location Type_CS': 'Authorized Dealers,Servicing Locations'}
...

推荐阅读