Json.dumps - управление котировками в выводе

Я создаю приложение Flask с деревом Treant.js. В примере это древовидная диаграмма принимает такие данные

    lana = 
    {
        text: {name: "lana"},
        image: "static/images/lana.png",
        parent: malory
    }

Это нормально работает. Теперь мне нужно воссоздать это из объекта Python

Прямо сейчас у меня есть

d = {}
d["parent"] = "malory"
d["text"] = { 'name': "lana" }
d['image'] = 'static/images/stripe.png'
print json.dumps(d)

>>> {"text": {"name": "lana"}, "image": "static/images/stripe.png", "parent": "malory"}

Кроме того, когда я регистрирую его на консоли в браузере, я получаю тот же результат.

Что не работает. Все ключи имеют кавычки, которые, кажется, вызывают проблему. Как убрать кавычки вокруг клавиш.

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
222
2

Ответы 2

Я считаю, что вы можете спутать объекты JavaScript и строки JSON. Ваша древовидная библиотека ожидает объект JavaScript. Вам нужно будет преобразовать вашу строку JSON в одну.

В JSON ключи должны быть строками, а строки в JSON - это определенный, как

a sequence of zero or more Unicode characters, wrapped in double quotes, using backslash escapes

Таким образом, удаление этих двойных кавычек приведет к недействительному JSON. Что нужно для этого разбирать это для создания объекта JavaScript:

let s = '{"text": {"name": "lana"}, "image": "static/images/stripe.png", "parent": "malory"}';
let o = JSON.parse(s);

Проблема не в котировках. Это скорее о преобразовании данных в код. На клиенте у вас должен быть действующий код JavaScript для выполнения. Обычно код статичен, а данные, с которыми он работает, динамически генерируются сервером. Такие данные обычно предоставляются в виде объектов JSON. А JSON похож на JavaScript, но это не код JavaScript. Однако JavaScript поддерживает JSON как собственный способ представления данных.

Пример:

<!-- your template -->
<script>
    var myVar = {{ my_flask_var|json }};
    console.info(myVar);
</script>

В приведенном выше примере ответ сервера будет выглядеть так:

<!-- your template -->
<script>
    var myVar = {"foo": 42, "bar": "qux"};
    console.info(myVar);
</script>

Однако это действительный JavaScript.

Другие вопросы по теме