Преобразование str в dict в python

Я получил это из вывода процесса, используя subprocess.Popen ():

{ about: 'RRDtool xport JSON output', meta: { start: 1401778440, step: 60, end: 1401778440, legend: [ 'rta_MIN', 'rta_MAX', 'rta_AVERAGE' ] }, data: [ [ null, null, null ], [ null, null, null ], [ null, null, null ], [ null, null, null ], [ null, null, null ], [ null, null, null ] ] } 

Для меня это не похоже. Я использовал ast.literal_eval() и json.loads() , но не повезло. Может ли кто-нибудь помочь мне в правильном направлении? Заранее спасибо.

    2 Solutions collect form web for “Преобразование str в dict в python”

    Действительно, более старые версии rddtool экспортируют ECMA-скрипт, а не JSON. Согласно этому отчету об ошибках debian, повышение 1.4.8 должно дать вам правильный JSON. Также см. Проект CHANGELOG :

    Выход JSON из xport теперь фактически компилируется json по ключевым словам, которые теперь правильно цитируются.

    Если вы не можете обновить, у вас есть два варианта: либо попытайтесь переформатировать, чтобы применить цитирование идентификаторов ключевых объектов, или использовать более легкий снизу парсер и проанализировать обозначение объекта ECMA-скрипта.

    Последнее можно сделать с помощью внешней библиотеки demjson :

     >>> import demjson >>> demjson.decode('''\ ... { about: 'RRDtool xport JSON output', ... meta: { ... start: 1401778440, ... step: 60, ... end: 1401778440, ... legend: [ ... 'rta_MIN', ... 'rta_MAX', ... 'rta_AVERAGE' ... ] ... }, ... data: [ ... [ null, null, null ], ... [ null, null, null ], ... [ null, null, null ], ... [ null, null, null ], ... [ null, null, null ], ... [ null, null, null ] ... ] ... }''') {u'about': u'RRDtool xport JSON output', u'meta': {u'start': 1401778440, u'step': 60, u'end': 1401778440, u'legend': [u'rta_MIN', u'rta_MAX', u'rta_AVERAGE']}, u'data': [[None, None, None], [None, None, None], [None, None, None], [None, None, None], [None, None, None], [None, None, None]]} 

    Восстановление может быть выполнено с использованием регулярного выражения; Я собираюсь предположить, что все идентификаторы находятся на новой строке или непосредственно после открытия { фигурная скобка. Одиночные кавычки в списке должны быть изменены на двойные кавычки; это будет работать, только если в значениях нет встроенных одинарных кавычек:

     import re import json yourtext = re.sub(r'(?:^|(?<={))\s*(\w+)(?=:)', r' "\1"', yourtext, flags=re.M) yourtext = re.sub(r"'", r'"', yourtext) data = json.loads(yourtext) 

    Это действительно недействительно JSON. Это, однако, действительный YAML , поэтому сторонняя библиотека PyYAML может помочь вам:

     >>> import yaml >>> yaml.load(text) { 'about': 'RRDtool xport JSON output', 'meta': { 'start': 1401778440, 'step': 60, 'end': 1401778440, 'legend': [ 'rta_MIN', 'rta_MAX', 'rta_AVERAGE' ] }, 'data': [ [None, None, None], [None, None, None], [None, None, None], [None, None, None], [None, None, None], [None, None, None] ] } 
     
    Interesting Posts for Van-Lav

    Почему добавление 1 .__ __ (1) дает синтаксическую ошибку?

    Numpy: декартово произведение массивов x и y в единый массив двумерных точек

    RegEx Tokenizer для разделения текста на слова, цифры и знаки препинания

    Почему язык Python не имеет метода writeln ()?

    Как избежать «Разрешения отказа» при использовании pip с virtualenv

    Используйте один и тот же инвентарь для нескольких сайтов в django python

    Анализ сложности фильтра () с лямбда-функцией

    Как хранить словарь python в mysql DB через python

    Python httplib ResponseNotReady

    странное поведение python с смешиванием глобальных переменных / параметров и функции с именем «top»

    Завершить несколько потоков, когда какой-либо поток завершает задачу

    Сортировка словаря по словарям по значению

    selenium ajax динамический пагинационный базовый паук

    Как передавать данные POST в запросы Python?

    Изменение значения точности и отсутствие изменения значения потерь в двоичной классификации с использованием Tensorflow

    Python - лучший язык программирования в мире.