C++/RapidJSON: удаление префикса unicode Python из строки JSON для синтаксического анализа

У меня есть веб-API Python, который возвращает JSON с префиксом «u» вместо стандартных двойных кавычек.

Я хочу иметь возможность анализировать это на С++ с помощью функции RapidJSON document.Parse(string), однако форматирование Python не позволяет RapidJSON проверять его как правильный JSON.

Как лучше всего правильно отформатировать JSON и удалить префиксы для анализа с помощью RapidJSON?

Ниже приведена строка, которую я хочу проанализировать с помощью RapidJSON, однако утверждение IsObject() не выполняется (при условии, что RapidJSON не может анализировать строки Unicode JSON в формате Python).

{u'artist': u'Death Grips', u'track': u'Hunger Games', u'import_date': datetime.datetime(2015, 12, 1, 4, 6, 23), u'track_id': u'TRUCCPM1515BB84DDF-0', u'codever': u'4.12', u'length': 159, u'score': 4.8918204, u'source': u'local', u'release': u'No Love Deep Web'}

Спасибо!

Редактировать:

Оказывается, мой ответ был не JSON, а Python dict. json.dumps в dict не работал из-за неподдерживаемого типа (datetime.datetime). Я удалил оскорбительную запись, используя

del response.metadata[u'import_date'];

Затем выполнение json.dumps(response.metadata) сработало правильно и вернуло JSON.


person Kevin    schedule 02.12.2015    source источник
comment
Вы уверены, что это JSON, а не нотация объекта Python?   -  person user253751    schedule 02.12.2015
comment
Это хороший момент, я рассмотрю кодировку как JSON, прежде чем возвращать ответ в моем Python API... Я попытался просто выполнить json.dumps для объекта, но это полностью нарушает ответ моего сервера.   -  person Kevin    schedule 02.12.2015


Ответы (1)


Это все еще недопустимый JSON. Вы можете использовать http://jsonlint.com/ или аналогичный инструмент для проверки JSON. RapidJSON может обрабатывать только JSON, соответствующий RFC7159/ECMA-404.

person Milo Yip    schedule 06.12.2015