将Python字典转换为JavaScript对象文字

5
使用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库可以完成这个任务?


1
你计划如何将数据从Python传输到JavaScript? - thefourtheye
thefourtheye:在HTML模板中,我将把从Python创建的对象字面量分配给JavaScript变量。也许有一种方法可以使用JavaScript从json.dumps的输出生成对象字面量? - mickeybob
2
您可以在JavaScript模板部分中使用JSON.parse,将此字符串转换为有效的JavaScript对象字面量。 - thefourtheye
谢谢。暂时这就足够了,不过我还是很好奇是否可以直接从Python生成对象字面量。 - mickeybob
或者像这样:print("{" + ", ".join("%s: %r" % (k, d[k]) for k in d) + "}")(但是在两种语言之间使用JSON传输会更加清晰) - tobias_k
这是一个有效的问题,具有许多有用的应用。 - Om Solari
2个回答

1
如果您知道所有的密钥都是有效的令牌,您可以使用这个简单的代码:
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() 的返回值符合您的格式要求。

0

有一个不太正规的方法,但可能有效:子类化JSONEncoder并覆盖_iterencode_dict方法,以便按您想要的格式生成键。在Python3.3中,它位于json.encoder模块的第367行,在该行中yield _encoder(key)。您可能需要复制整个方法并将此行更改为类似于yield key if isinstance(key, str) else _encoder(key)的内容。

再次强调 - 这真的很不正规,除非您没有其他选择 - 不要这样做。尽管如此,如果您确实需要它,那么值得知道它是可行的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接