Я создаю приложение 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"}
Кроме того, когда я регистрирую его на консоли в браузере, я получаю тот же результат.
Что не работает. Все ключи имеют кавычки, которые, кажется, вызывают проблему. Как убрать кавычки вокруг клавиш.
Я считаю, что вы можете спутать объекты 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.