2012-05-30 35 views
0

我想與VS2008使用JSON CPP。二進制數據JSONCPP

誰能告訴我是否可以將二進制數據打包成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。我用它(用C++以外的其他語言)編碼圖像沒有問題。如果您將其設置爲圖像的src,您只需在data:image/png;base64,(假設是png)將編碼圖像的前綴自動解碼爲javascript。

編輯:與其他任何語言一樣,C++中的base64編碼非常簡單。這裏有一個庫:https://github.com/ReneNyffenegger/development_misc/tree/master/base64

+0

你能解釋一下上面的代碼嗎?我犯了什麼錯誤? –

+0

您將文件的內容放入您的值中,然後讓StyledWriter對其進行編碼。它應該如何知道它應該添加我建議的前綴並將其編碼爲base64? –

+0

謝謝...我用base64編碼它。現在工作正常。 –