Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 13, 2012 22:19:10

kise97
Зарегистрирован: 2012-05-31
Сообщения: 83
Репутация: +  4  -
Профиль  

Объединение нескольких листов в один и последующая генерация JSON

Добрый день.

У меня есть такие переменные

list1=['sth param1', 'aesdf', 'asdasd','asdsda']
list2=['sth param2', 'asdasds', 'sdasdd',asdasdasa']
list3=['sth param3','sadasd','asdas]
''' Количество параметров у листов различно или одинаково '''
type='adsad'
num='12332'
И из всего этого мне нужно сгенерировать JSON примерно такого содержания:

{
    'type':'adsad',
    'num':'12332',
    list:[
        'list1':[   
            'sth param1',
            'sth param2',
            'sth param3',
        ],
        'list2':[   
            'aesdf',
            'asdasds',
            'sadasd',
        ],
        'list3':[   
            'asdasd',
            'sdasdd',
            'asdas',
        ],
        'list4':[   
            'asdsda',
            'asdasdasa',
            '',
        ],
    ]
}

К сожалению моих знаний недостаточно чтобы провернуть подобное. Может ли кто то направить меня на истинный путь?

Офлайн

#2 Дек. 13, 2012 23:19:05

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Объединение нескольких листов в один и последующая генерация JSON

Конкретно под ваш пример, однако в реальности так писать не стоит -дурной тон . К тому же вы совершаете потенциальную ошибку переопределяя встроенные функции Питона - в данном случае type().

import json, collections
list1=['sth param1', 'a', 'aa','aaa']
list2=['sth param2', 'b', 'bb','bbb']
list3=['sth param3', 'c','cc']
type_of_something='my_value'
num='2012'
tmp=map(None, list1, list2, list3)
print json.dumps({'type': type_of_something,
            'num': num,
            'list': collections.OrderedDict((('list1', tmp[0]),
                     ('list2', tmp[1]),
                     ('list3', tmp[2]),
                     ('list4', tmp[3])
                     ))
            })

{"list": {"list1": ["sth param1", "sth param2", "sth param3"], "list2": ["a", "b", "c"], "list3": ["aa", "bb", "cc"], "list4": ["aaa", "bbb", null]}, "num": "2012", "type": "my_value"}[s][/s]

исправление: OrderedDict здесь используется для упорядоченного вывода содержимого ключа “list”, хотя ,разумеется, можно использовать и sorted. На самом деле это вам под ваши задачи решать что и как писать.



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Отредактировано JOHN_16 (Дек. 13, 2012 23:33:08)

Офлайн

#3 Дек. 13, 2012 23:30:51

kise97
Зарегистрирован: 2012-05-31
Сообщения: 83
Репутация: +  4  -
Профиль  

Объединение нескольких листов в один и последующая генерация JSON

Да, я такое решение уже принимал во внимание, но тем не менее это решение довольно вялое.
Может быть есть более адекватные варианты решения поставленной задачи?

Офлайн

#4 Дек. 13, 2012 23:34:09

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Объединение нескольких листов в один и последующая генерация JSON

kise97
Что значит вялое? каким вы видите “адекватное” решение. В любой форме изъяснитесь.



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#5 Дек. 13, 2012 23:37:03

kise97
Зарегистрирован: 2012-05-31
Сообщения: 83
Репутация: +  4  -
Профиль  

Объединение нескольких листов в один и последующая генерация JSON

Адекватного ответа, увы, но дать не смогу. Плохо выражаю письменно свои мысли.

Ну к примеру может быть есть какие либо классы или расширения к python для создания JSON?

Офлайн

#6 Дек. 13, 2012 23:40:38

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Объединение нескольких листов в один и последующая генерация JSON

kise97
Т.е. вы хотите ручками, с нуля создать JSON?



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#7 Дек. 14, 2012 00:15:37

Lexander
От:
Зарегистрирован: 2008-09-19
Сообщения: 1139
Репутация: +  33  -
Профиль   Отправить e-mail  

Объединение нескольких листов в один и последующая генерация JSON

json.JSONEncoder().encode({"type": type1, "num": num, "list": {"list1": list1, "list2": list2, "list3": list3}})
или свой кодировщик создайте
class MyEncoder(json.JSONEncoder):
    def default(self, type1, num, list1, list2, list3):
        return [{"type": type1, "num": num, "list": {"list1": list1, "list2": list2, "list3": list3}}]



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version