AJAX публикация словаря python приводит к JSONDecodeError - PullRequest
0 голосов
/ 09 апреля 2020

Я передаю словарь python в шаблон, затем $ .Pposting его для представления в django, и когда я пытаюсь json .load загрузить его в моем представлении постов, я получаю JSONDecodeError. Кто-нибудь знает, как я могу это исправить?

//1. vars to templates


@login_required
def bracket(request):
    '''

    :param request:
    :return:
    '''
    ...

    context = {'arr':json.dumps(tournament_games_json_serializable), 'nested':nested_tournament_games['rounds']}#{'latest_question_list': latest_question_list}
    return render(request, 'madness/bracket.html', context)


//2. AJAX post of template var

$.post('{% url "update_bracket"  %}',
        { bracketData: "{{arr}}" },
        function(data, status, xhr) {
console.log(JSON.stringify(data));
var nested = JSON.stringify(data);
        }).done(function() {  })
        .fail(function(jqxhr, settings, ex) { alert('failed, ' + ex); });

//3.  update_bracket

@csrf_exempt
def update_bracket(request):
    bracketData = request.POST['bracketData']
    print(json.loads(bracketData))
    ...

, где tour_games_json_serializable равно

tournament_games_json_serializable
{'round_1_game_1': {'players': (2, 3), 'winner': None, 'loser': None, 'done': False}, 'round_2_game_1': {'players': (1, 'winner of Round 1 Game 1'), 'winner': None, 'loser': None, 'done': False}}

request.POST ['braggerData']

'{"round_1_game_1": {"players": [2, 3]...

json. загружает (BracketData)

json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes: line 1 column 2

Ответы [ 2 ]

1 голос
/ 09 апреля 2020

Использование html.unescape():

import json
import html
bracketData = '{"round_1_game_1": {"players": [2, 3]}}'
print(json.loads(html.unescape(bracketData)))

Вывод:

{'round_1_game_1': {'players': [2, 3]}}
0 голосов
/ 09 апреля 2020

Вы пытались использовать безопасный фильтр?

{ bracketData: "{{arr|safe}}" },
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...