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

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

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

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

Ниже приведена строка, которую я хочу проанализировать с помощью RapidJSON, однако утверждение IsObject() не выполняется (при условии, что RapidJSON не может анализировать строки JSON в формате Unix, отформатированные в 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. Ошибка json.dumps в dict из-за неподдерживаемого типа (datetime.datetime). Я удалил оскорбительную запись, используя

del response.metadata[u'import_date'];

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

1 ответ

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

Другие вопросы по тегам