Javascript 正在尝试从Django解析序列化数据

Javascript 正在尝试从Django解析序列化数据,javascript,arrays,json,django,Javascript,Arrays,Json,Django,我想使用Javascript在客户机上做一些事情。我在视图中用JSON序列化模型中的查询集,并将其发送到模板 data = serializers.serialize("json", Profile.objects.filter(user_id=self.request.user)) 我的结论是: var data = '[ { "model": "accounts.profile",

我想使用Javascript在客户机上做一些事情。我在视图中用JSON序列化模型中的查询集,并将其发送到模板

data = serializers.serialize("json", Profile.objects.filter(user_id=self.request.user))
我的结论是:

var data = '[
                {
                    "model": "accounts.profile", 
                    "pk": 14, 
                    "fields": {
                        "user": 14, 
                        "email_confirmed": true, 
                        "encrypted_private_key": "Z0FBQUFBQmJLQT09", 
                        "public_key": "LS0tLSS0tLQo=", 
                        "salt": "I8rzovcWsKm4G5Pj3E4DMw=="
                              }
                }
            ]';
当我尝试这样做时:

var data = JSON.parse('{{ data|safe }}');
我犯了一个错误

Uncaught SyntaxError: Unexpected token { in JSON at position 1

有人能帮忙吗?

您的字符串包含换行符,所以

var data = JSON.parse('{{ data|safe }}');
这是行不通的。尝试使用反勾号(不确定如何在此处输入),而不是

但是,如果您已经将数据转储到json,则不需要在JS端解析它,只需这样做即可

var data = {{ data|safe }}; 
更新:注意,上面的模板变量周围没有引号,上面的内容将变成(在查看源代码中检查):

注意,它周围仍然没有引号。这是有效的Javascript,无需进一步操作(即解析)

update2:要在.js文件中使用此数据,您需要如下更改.js文件:

var some_unique_name = function (data) {
    ... original code goes here ...
};
在您的html中:

<script src="...your script"></script>
<script>
    some_unique_name({{ data|safe }});
</script>

一些唯一的名称({{data}safe});
更新3:以上内容将扩展到(使用浏览器的查看源代码功能检查):


一些独特的名字([
{
“模型”:“accounts.profile”,
“pk”:14,
“字段”:{
“用户”:14,
“电子邮件确认”:正确,
“加密私钥”:“Z0FBQUFBQmJLQT09”,
“公钥”:“LS0tLSS0tLQo=”,
“盐”:“I8rzovcWsKm4G5Pj3E4DMw=”
}
}
]);
这是有效的javascript。但是,您不能盲目地在html事件处理程序中执行相同的操作,因为

<button type="button" onclick="some_unique_name({{ data|safe }})" ...>

将扩展到

    <button type="button" onclick="some_unique_name([
            {
                "model": "accounts.profile",    // syntax error here..
                "pk": 14, 
                "fields": {
                    "user": 14, 
                    "email_confirmed": true, 
                    "encrypted_private_key": "Z0FBQUFBQmJLQT09", 
                    "public_key": "LS0tLSS0tLQo=", 
                    "salt": "I8rzovcWsKm4G5Pj3E4DMw=="
                          }
            }
        ])" ...>

浏览器会将其视为

<button type="button" onclick="some_unique_name([{"

可能意味着JSON不能以
[
开头?可能您需要这样更改:
Profile.objects.filter(user\u id=self.request.user)[0]
?尝试在
JSON.parse(variable\u name)之前使用带有变量的
{data | safe}
,不幸的是,您的建议都不起作用。我尝试在HTML文件中创建一个全局变量,如
var data={{data | safe}};
和从我的javascript文件访问它,但它给出了相同的错误。我尝试设置带引号和不带引号的变量,还使用backtick。我想将JSON数组转换为javascript对象,这就是我使用
JSON.parse
的原因。我尝试使用backtick,但不起作用…不起作用不是问题描述…po我想说的是,json格式的字符串是一个有效的js表达式,因此您可以直接将其插入到代码中,而无需对其进行解析。我的意思是“不起作用”是我已经描述过的相同问题仍然存在。这是Django在将数据序列化为json后给我的信息。您知道如何使用序列化数据吗不需要解析它们吗?是的,按照我的答案将其插入代码中。我已经用生成的代码进行了更新,您可以使用浏览器的查看源代码功能自行检查。别担心,您不会表现得不友好。我也很累。我已经为此工作了一整天。无论如何,我尝试了您的第一个解决方案:
var my\u variable={{data | safe}};。
这给了我一个错误,由于某些原因,我现在无法真正复制它……但是它单击了我,我将onclick参数更改为使用单引号而不是双引号,不,它工作得很好。
试试它
    <button type="button" onclick="some_unique_name([
            {
                "model": "accounts.profile",    // syntax error here..
                "pk": 14, 
                "fields": {
                    "user": 14, 
                    "email_confirmed": true, 
                    "encrypted_private_key": "Z0FBQUFBQmJLQT09", 
                    "public_key": "LS0tLSS0tLQo=", 
                    "salt": "I8rzovcWsKm4G5Pj3E4DMw=="
                          }
            }
        ])" ...>
<button type="button" onclick="some_unique_name([{"
<script>
    var my_variable = [
            {
                "model": "accounts.profile",    // syntax error here..
                "pk": 14, 
                "fields": {
                    "user": 14, 
                    "email_confirmed": true, 
                    "encrypted_private_key": "Z0FBQUFBQmJLQT09", 
                    "public_key": "LS0tLSS0tLQo=", 
                    "salt": "I8rzovcWsKm4G5Pj3E4DMw=="
                          }
            }
        ];
</script>
<button type="button" onclick="some_unique_name(my_variable);">..</button>
<script>
    var foo = function () {
        some_unique_name([
            {
                "model": "accounts.profile",    // syntax error here..
                "pk": 14, 
                "fields": {
                    "user": 14, 
                    "email_confirmed": true, 
                    "encrypted_private_key": "Z0FBQUFBQmJLQT09", 
                    "public_key": "LS0tLSS0tLQo=", 
                    "salt": "I8rzovcWsKm4G5Pj3E4DMw=="
                          }
            }
        ]);
    };
</script>
<button type="button" onclick="foo();">..</button>
<script>
    var my_variable = {{ data|safe }};
</script>
<button type="button" onclick="some_unique_name(my_variable);">..</button>
<script>
    var foo = function () {
        some_unique_name({{ data|safe }});
    };
</script>
<button type="button" onclick="foo();">..</button>