2015-03-27 3 views
2

Я пытаюсь передать некоторые данные json, извлеченные из файла JavaScript.преобразование строки в словарь с помощью json.loads

У меня есть следующая переменная в моем коде python. Я получаю строку из файла file.read(). Я знаю, что нижеследующее будет установлено как dict, если оно вставлено в код python, как есть.

resultStr = {"inst":{"summary":{"statistics":[],"wa_recursive":"100.000%","files":11,"dus":11}},"du":{"summary":{"statistics":[{"type":"stmt","data":"Statement Coverage","status":"covered","weight":1,"rhits":"100.000%","rtotal":"100.000%"},{"data":"Statements","rhits":86.000,"rtotal":86.000},{"data":"Subprograms","rhits":0.000,"rtotal":0.000},{"type":"branch","data":"Branch Coverage","status":"covered","weight":1,"rhits":"100.000%","rtotal":"100.000%"},{"data":"Branch paths","rhits":42.000,"rtotal":42.000},{"data":"Branches","rhits":21.000,"rtotal":21.000},{"type":"toggle","data":"Toggle Coverage","status":"uncovered","weight":1,"rhits":"94.410%","rtotal":"100.000%"},{"data":"Toggle bins","rhits":304.000,"rtotal":322.000},{"data":"Signal bits","rhits":150.000,"rtotal":161.000}],"wa_recursive":"98.137%","files":11,"dus":11}}}; 

Когда я передать эту строку в загрузчик JSon

json.loads(resultStr) 

Я получаю следующее исключение

File "C:\Python34\lib\json\__init__.py", line 318, in loads 
    return _default_decoder.decode(s) 
    File "C:\Python34\lib\json\decoder.py", line 346, in decode 
    raise ValueError(errmsg("Extra data", s, end, len(s))) 
ValueError: Extra data: line 1 column 825 - line 1 column 826 (char 824 - 825) 

упрощать его неудачу в последней части строки

"wa_recursive":"98.137%","files":11,"dus":11}}}; 

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

Я не могу показаться, чтобы найти какой-либо вины с ним, поэтому некоторые помощь будет оценена :)

Спасибо :)

+2

Вещь, которую вы передаете в 'json.loads', является словарем, а не строкой. Я не ошибаюсь, когда загружаю его. Вы положили точку с запятой в строку? –

+0

Значение представляет собой строку IE resultStr сообщается как строка. Возможно, я показал это неправильно, но значение, которое я получил от файла file.read(). ИТО исправьте, я также получаю dict, если я просто вставляю это в свой код. – Ephreal

ответ

2

Следующая отлично работает для меня. Вы сохранили точку с запятой в строке?

import json 
resultStr = '{"inst":{"summary":{"statistics":[],"wa_recursive":"100.000%","files":11,"dus":11}},"du":{"summary":{"statistics":[{"type":"stmt","data":"Statement Coverage","status":"covered","weight":1,"rhits":"100.000%","rtotal":"100.000%"},{"data":"Statements","rhits":86.000,"rtotal":86.000},{"data":"Subprograms","rhits":0.000,"rtotal":0.000},{"type":"branch","data":"Branch Coverage","status":"covered","weight":1,"rhits":"100.000%","rtotal":"100.000%"},{"data":"Branch paths","rhits":42.000,"rtotal":42.000},{"data":"Branches","rhits":21.000,"rtotal":21.000},{"type":"toggle","data":"Toggle Coverage","status":"uncovered","weight":1,"rhits":"94.410%","rtotal":"100.000%"},{"data":"Toggle bins","rhits":304.000,"rtotal":322.000},{"data":"Signal bits","rhits":150.000,"rtotal":161.000}],"wa_recursive":"98.137%","files":11,"dus":11}}}' 
decodedData = json.loads(resultStr); 
print(decodedData); 
+0

Мне нужно было удалить точку с запятой. :) thx – Ephreal

+0

Хотя на самом деле это не так, он сообщил об ошибке – Ephreal