将python字典转换为JavaScript对象字面值

时间:2014-01-19 17:26:04

标签: python json

使用json.dumps我可以将字典转换为json格式,如下所示:

>>> from json import dumps
>>> dumps({'height': 100, 'title': 'some great title'})
'{"title": "some great title", "height": 100}'

但是,我希望将我的字典变成javascript文字,如下所示:

{title: "some great title", height: 100}

(注意标题和高度周围没有双引号。)

是否有Python库可以执行此操作?

2 个答案:

答案 0 :(得分:0)

肮脏的黑客,但可以工作:子类JSONEncoder并覆盖_iterencode_dict方法,以便它产生您想要的格式化密钥。在python3.3中,它位于行json.encoder的{​​{1}}模块的第367行。您可能希望复制整个方法并将此行更改为_encoder(key)

再次 - 这真的很脏,除非你别无选择 - 不要这样做。虽然它是可行的,但是如果你真的需要的话还有什么值得了解。

答案 1 :(得分:0)

如果您知道所有密钥都是有效令牌,则可以使用以下简单代码:

import json

def js_list(encoder, data):
    pairs = []
    for v in data:
        pairs.append(js_val(encoder, v))
    return "[" + ", ".join(pairs) + "]"

def js_dict(encoder, data):
    pairs = []
    for k, v in data.iteritems():
        pairs.append(k + ": " + js_val(encoder, v))
    return "{" + ", ".join(pairs) + "}"

def js_val(encoder, data):
    if isinstance(data, dict):
        val = js_dict(encoder, data)
    elif isinstance(data, list):
        val = js_list(encoder, data)
    else:
        val = encoder.encode(data)
    return val

encoder = json.JSONEncoder(ensure_ascii=False)
js_val(encoder, {'height': 100, 'title': 'some great title'})

js_val()的返回值采用您想要的格式。