2014-01-19 5 views
3

Использование json.dumps я могу конвертировать словарь в формате JSON как это:Преобразовать питон словарь в JavaScript объект буквенные

>>> from json import dumps 
>>> dumps({'height': 100, 'title': 'some great title'}) 
'{"title": "some great title", "height": 100}' 

Однако, я ищу, чтобы превратить свой словарь в JavaScript буквального, как это:

{title: "some great title", height: 100} 

(Обратите внимание, нет двойных кавычек вокруг названия и высоты.)

есть библиотека Python, чтобы сделать это?

+1

Как именно вы планируете передавать данные с Python на JavaScript? – thefourtheye

+0

thefourtheye: Внутри HTML-шаблона я назначу литерал объекта, который я создаю из Python, в переменную JavaScript. Может быть, есть способ генерировать литерал объекта с помощью JavaScript из вывода json.dumps? – mickeybob

+2

Вы можете использовать 'JSON.parse' в части шаблона JavaScript, чтобы преобразовать эту строку в действительный литерал объекта JavaScript. – thefourtheye

ответ

0

Грязный взломать, но может работать: подкласс JSONEncoder и переопределить метод _iterencode_dict, чтобы он дал ключ, отформатированный так, как вы хотите. В python3.3 он находится в строке 367 модуля json.encoder в строке _encoder(key). Вероятно, вы хотите скопировать весь метод и изменить эту строку на что-то вроде yield key if isinstance(key, str) else _encoder(key).

Опять же - это действительно грязно, если у вас нет другого выбора - не делайте этого. Хотя, это выполнимо, что стоит знать, если вы действительно в ней нуждаетесь.

0

Если вы знаете, все ключи являются допустимыми лексемами вы можете использовать этот простой код:

import json 

def js_list(encoder, data): 
    pairs = [] 
    for v in data: 
     pairs.append(js_val(encoder, v)) 
    return "[" + ", ".join(pairs) + "]" 

def js_dict(encoder, data): 
    pairs = [] 
    for k, v in data.iteritems(): 
     pairs.append(k + ": " + js_val(encoder, v)) 
    return "{" + ", ".join(pairs) + "}" 

def js_val(encoder, data): 
    if isinstance(data, dict): 
     val = js_dict(encoder, data) 
    elif isinstance(data, list): 
     val = js_list(encoder, data) 
    else: 
     val = encoder.encode(data) 
    return val 

encoder = json.JSONEncoder(ensure_ascii=False) 
js_val(encoder, {'height': 100, 'title': 'some great title'}) 

возвращаемое значение js_val() в нужном формате.

Смежные вопросы