6

I have a python code which converts the normal dict into JSON as follows

groups = {
    'g_1': [
        {'name': 'something', 'id': '1'}, 
        {'name': 'something', 'id': '1'}
    ], 
    'g_2': [
        {'name': 'something', 'id': '1'}, 
        {'name': 'something', 'id': '1'}
    ]
}

I have used json.dumps to convert that to a json as follows

import json
groups = json.dumps(groups)

I want to read the data in javascript as an object. How to I access it?

I tried var groups=JSON.parse({{ groups }}) it didn't work out. Help me in parsing the data as javascript object.

1
  • 2
    Did any of the following answers, satisfied you? If so, please accept one. Its a good practice in StackOverflow. Commented Mar 8, 2017 at 21:48

4 Answers 4

9

This should work:

var groups = JSON.parse('{{ groups|safe }}');

Sign up to request clarification or add additional context in comments.

Comments

0

try:

var groups = JSON && JSON.parse({{ groups }})|| $.parseJSON({{ groups }});

1 Comment

Still wont work for me. The code would print out something like $.parseJSON({'key': 0}) . And raise Uncaught SyntaxError: Unexpected token &
0

You may have troubles with ' character trying to run var groups = "{{ groups|safe }}"; or var groups = '{{ groups|safe }}';. If both answers don't work try this solution:

function escapeRegExp(str) {
    return str.replace(/([.*+?^=!:${}()|\[\]\/\\])/g, "\\$1");
}
function replaceAll(str, find, replace) {
    return str.replace(new RegExp(escapeRegExp(find), 'g'), replace);
}

var str = "{{ groups|safe }}";
var new_str = replaceAll(str, "'", "\"");

var groups = JSON.parse(new_str);

I had to replace all ' to " in the dictionary for JSON.parse to work. To know more about these functions check Stack How to replace all occurrences of a string in JavaScript question.

Comments

0

For others looking for this,

In view:

import json
from django.core.serializers.json import DjangoJSONEncoder

...
groups = {
'g_1': [
    {'name': 'something', 'id': '1'}, 
    {'name': 'something', 'id': '1'}
], 
'g_2': [
    {'name': 'something', 'id': '1'}, 
    {'name': 'something', 'id': '1'}
]
}
...
return render(request=request,
          template_name=self.template_name,
          context={'groups' : json.dumps(groups, cls=DjangoJSONEncoder),})

In Template:

var groups = {{groups|safe}};

Info on DjangoJSONEncoder

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.