我正在尝试将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 * buffer是对还是错。请告诉我代码有什么问题。感谢。
答案 0 :(得分:1)
您必须对其进行编码,因为JSON是javascript结构格式的一个子集,因为它出现在javascript源代码中。
JSON中最常用的二进制数据编码是Base64。我使用它(用c ++以外的其他语言)来编码图像没有问题。您只需要使用data:image/png;base64,
(假设它是png)为编码图像添加前缀,以便在将其设置为图像的src时在javascript中自动解码。
编辑:与任何其他语言一样,C ++中的base64编码很简单。这是一个图书馆:https://github.com/ReneNyffenegger/development_misc/tree/master/base64