Двоичные данные JSONCPP
Я пытаюсь использовать JSON cpp с VS2008.
Может кто-нибудь сказать мне, возможно ли упаковать двоичные данные в формат JSON? Я читаю файл изображения в char* buffer
и положить его в JSON::Value
, Но когда я пытаюсь разобрать его, я не нахожу содержимое буфера в объекте JSON.
Код выглядит следующим образом.
Json::Value root;
Json::Reader reader;
Json::StyledWriter writer;
int length;
char * buffer;
ifstream is;
is.open ("D:\\test.j2k", ios::binary);
// get length of file:
is.seekg (0, ios::end);
length = is.tellg();
is.seekg (0, ios::beg);
// allocate memory:
buffer = new char [length];
// read data as a block:
is.read (buffer,length);
root["sample"] = *buffer;
writer.write(root);
cout << root;
const string rootAsString = root.toStyledString();
cout << rootAsString << endl;
Так как я новичок в VC++, я не уверен, правильно или неправильно читать файл изображения в буфер char *. Пожалуйста, дайте мне знать, что не так с кодом. Благодарю.
1 ответ
Вы должны закодировать его, потому что JSON является подмножеством формата структур javascript, как это выглядит в исходном коде javascript.
Наиболее часто используемая кодировка для двоичных данных в JSON - это Base64. Я использую его (на других языках, кроме с ++) для кодирования изображений без проблем. Вы просто должны префикс закодированного изображения с data:image/png;base64,
(предположим, что это png), чтобы он автоматически декодировался в javascript, если вы установите его в src изображения.
РЕДАКТИРОВАТЬ: как и в любом другом языке, кодирование base64 в C++ легко. Вот библиотека: https://github.com/ReneNyffenegger/development_misc/tree/master/base64