如何将 Python 字典转换为 JavaScript 哈希表?

Posted

技术标签:

【中文标题】如何将 Python 字典转换为 JavaScript 哈希表?【英文标题】:How can I convert Python dictionary to JavaScript hash table? 【发布时间】:2012-04-21 20:19:44 【问题描述】:

我已经传递给模板常规 Python 字典,我需要在里面

$(document).ready(function() ..

将该 Python 字典转换为 javascript 字典。我试过了

var js_dict=parameters;

但我遇到了错误( ' 而不是 ' 并且所有字符串都以 u' 开头)。

【问题讨论】:

你检查过python中是否有JSON.stringify等价物吗? 【参考方案1】:

Python 和 javascript 对于如何表示字典有不同的想法,这意味着您需要一个中间表示来在它们之间传递数据。最常用的方法是JSON,这是一种简单的轻量级数据交换格式。

使用python json library 将您的python dict 转换(或转储)为JSON 字符串。然后在 javascript 中将 JSON 字符串解析为 javascript dict。 (如果您使用的是 JQuery,则使用 jQuery.parseJSON)

【讨论】:

【参考方案2】:

您可以将其转换为 JSON 并在该模板中使用它

在你的python代码中做

import json
...
...
return 'parameters': json.dumps(parameters) #This data goes into your template

【讨论】:

【参考方案3】:

您可以将json.dumps(parameters)mark_safe() 一起使用

def custom_view(request):
    ...
    return render(request, 'tmpl.html', 'parameters': mark_safe(json.dumps(parameters)))

使用mark_safe(),我在模板中得到未转义的代码。

【讨论】:

【参考方案4】:

我发现这对包含 [ ' ] 的字符串也有帮助

const convertPythonDictToJSON = function (data) 
    let d = data.replace(new RegExp(`(?<=[a-zA-Z])'(?=[a-zA-Z ])`, "g"), '__')
    d = d.replace(new RegExp("'", 'g'), '"')
    d = d.replace(new RegExp("__", 'g'), "'")
    d = d.replace(new RegExp("None", 'g'), 'null')
    d = d.replace(new RegExp("False", 'g'), 'false')
    d = d.replace(new RegExp("True", 'g'), 'true')
    return JSON.parse(d)

【讨论】:

【参考方案5】:

正如其他人已经建议的那样,在您的视图中将您的字典转换为 JSON,然后将 JSON 传递给模板上下文确实是您最好的方法,但是如果您想在模板中将其保留为 python 字典,您可以;您只需要手动创建 javascript 版本(即您不能只使用 parameters 转储它)

<script>
    var js_dict = 
        % for k, v in parameters %
        " k ": " v "% if not forloop.last %,% endif %
        % endfor %
    
</script>

【讨论】:

【参考方案6】:

受以下 Chris Patt 回答启发的工作示例(注意区别):

 42     var js_dict = [
 43         % for k, v in parameters.iteritems %
 44             [" k "," v "] % if not forloop.last %,% endif %
 45         % endfor %
 46     ];

在 Django 中处理模板中的变量时,默认的 python 的 json 库似乎对我不起作用。

【讨论】:

【参考方案7】:

您不需要发送字典。

我是这样实现的:

views.py

def mess_opi(request):
    data = Opi_calculated.objects.all()

return render(request,'hab_app/opi_student_portal.html', 'data': data)

我的模板(用于 morris.html):

data: [% for item in data %
     "y": ' item.hostelName ', "a": ' item.opi_value ' % if not forloop.last %,% endif %
% endfor %],

【讨论】:

【参考方案8】:

如何通过在模板页面上传递对象而不是从 py 文件传递​​字典来处理这种情况,并且我在模板本身上创建了所需的字典。 喜欢:

在我的 py 上:

def abc(request): 
     conf = assessment_master.objects.all()
     return render(request, "enter_scheme.html", 'conf':conf)

在我的 Django 模板上: 在我的脚本标签中:

<script>
           var conf_dict_list = ;
           % for obj in conf_dict_list %
               conf_dict_list[" obj.short_name "] = " obj.select "
           % endfor %

            alert(JSON.stringify(conf_dict_list));
            // alert('key' in conf_dict_list); to check key is present in dict

</script>

【讨论】:

以上是关于如何将 Python 字典转换为 JavaScript 哈希表?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 Python 字典转换为 JavaScript 哈希表?

Python - 如何将类似字典的字符串转换为字典[重复]

如何将不带引号的嵌套字符串字典转换为Python中的字典

python - 如何将字典转换为python中的列表[重复]

如何将 Graphql 查询转换为 python 字典?

如何将CSV文件转换为python字典