Python解析非標准JSON(Key值非字符串)


采集數據的時候經常碰到一些JSON數據的Key值不是字符串,這些數據在JavaScript的上下文中是可以解析的,但在Python中,沒有該部分數據的上下文,無法采用json.loads(JSON)的形式導入。在網上搜集來一些方法以便日后使用。

方法一:

def parse_js(expr):
    """
    解析非標准JSON的Javascript字符串,等同於json.loads(JSON str)
    :param expr:非標准JSON的Javascript字符串
    :return:Python字典
    """
    obj = eval(expr, type('Dummy', (dict,), dict(__getitem__=lambda s, n: n))())
    return obj

方法二(推薦)

def parse_js(expr):
    """
    解析非標准JSON的Javascript字符串,等同於json.loads(JSON str)
    :param expr:非標准JSON的Javascript字符串
    :return:Python字典
    """
    import ast
    m = ast.parse(expr)
    a = m.body[0]

    def parse(node):
        if isinstance(node, ast.Expr):
            return parse(node.value)
        elif isinstance(node, ast.Num):
            return node.n
        elif isinstance(node, ast.Str):
            return node.s
        elif isinstance(node, ast.Name):
            return node.id
        elif isinstance(node, ast.Dict):
            return dict(zip(map(parse, node.keys), map(parse, node.values)))
        elif isinstance(node, ast.List):
            return map(parse, node.elts)
        else:
            raise NotImplementedError(node.__class__)

    return parse(a)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM