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.