0

我正在尝试将 JSON cpp 与 VS2008 一起使用。

谁能告诉我是否可以将二进制数据打包成 JSON 格式?我正在将图像文件读char* bufferJSON::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 * 缓冲区是否正确/错误。请让我知道代码有什么问题。谢谢。

4

1 回答 1

2

您必须对其进行编码,因为 JSON 是 javascript 结构格式的子集,因为它出现在 javascript 源代码中。

JSON 中最常用的二进制数据编码是 Base64。我使用它(在 C++ 以外的其他语言中)对图像进行编码而没有问题。如果您将其设置为图像的 src,您只需在编码图像前加上data:image/png;base64,(假设它是 png)以使其在 javascript 中自动解码。

编辑:与任何其他语言一样,C++ 中的 base64 编码很容易。这是一个库:https ://github.com/ReneNyffenegger/development_misc/tree/master/base64

于 2012-05-30T07:47:01.543 回答