Двоичные данные 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

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