将图像转换为 JSON 时发生错误(数据损坏),反之亦然

Posted

技术标签:

【中文标题】将图像转换为 JSON 时发生错误(数据损坏),反之亦然【英文标题】:Error(Data Corruption) occur while converting image into JSON and vice Versa 【发布时间】:2017-06-12 04:02:06 【问题描述】:

在将任何图像转换为数据并后跟 JSON 时,它会在 JSON 字符串中添加一些特殊字符。

ios 端(服务器端)

Image -> NSData -> NSString -> JSON 字符串(这个 JSON 字符串 包含一些特殊字符)

在客户端提取时,它会破坏图像数据并且该数据未正确解码。

在 Java 端(客户端)

数据 -> 解析成 JSON 字符串 -> 我们得到的图像数据已损坏 -> 无法形成图像

iOS 端代码:

NSData *dataImage = UIImagePNGRepresentation(baseImgView.image);   
NSString *stringImage = [dataImage base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength]; 
currentImage = stringImage;

进一步创建了一个名为 parameter 的字典,并使用以下方法将其转换为 json :

 NSData *jsonData = [NSJSONSerialization dataWithJSONObject:parameter options:NSJSONWritingPrettyPrinted error:nil];
 NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];

请建议我用同样的方法来处理这个问题?

【问题讨论】:

你要上传图片到服务器吗?? 是的,我正在使用 iOS 服务器上传图像(在 GCDAsyncSocket 库的帮助下创建)并在 java 端提取它(客户端是用 java 制作的) 请上传完整代码 我已经更新了用于将图像转换为 base 64 和 json string 的 iOS 代码。这个 JSON 字符串被传递给 java 服务器。 【参考方案1】:

iOS 端

Image -> NSData ->Base 64 String -> JSON 字符串(这个 JSON 字符串包含 一些特殊字符)

首先使用 NSDataBase64Encoding64CharacterLineLength(base 64 编码)将其转换为 base 64 字符串,然后在转换为 json 期间使用 NSUTF8StringEncoding(UTF8 编码)。

在 java 端,我们需要解码 utf8 字符串编码以及基本编码。 导入 java.util.Base64;

其中一个***链接(不记得确切的链接)给出了一个想法。代码如下:

这里的图片是编码字符串。

import java.util.Base64;

     try 
    // Encode using basic encoder
    String base64encodedString=Base64.getEncoder().encodeToString(Image.getBytes("utf-8"));
    //   System.out.println("Base64 Encoded String (Basic) :" +base64encodedString);
    // Decode
        byte[] base64decodedBytes = Base64.getDecoder().decode(base64encodedString);    
        String replaceableImage =   new String(base64decodedBytes, "utf-8");
        System.out.println("Original String:" + replaceableImage);
    catch(UnsupportedEncodingException e)
        System.out.println("Error :" + e.getMessage());
    

【讨论】:

以上是关于将图像转换为 JSON 时发生错误(数据损坏),反之亦然的主要内容,如果未能解决你的问题,请参考以下文章

将Cosmos DB模拟器(MongoDB API)迁移到Azure时发生致命错误

C# JSON 将文件反序列化为对象列表失败,并将字符串转换为集合错误

将 JSON 对象脱盐到数据表时将值“1D”转换为类型“System.Int64”时出错

struts2的json插件导致数据返回到页面时发生懒加载错误。

无法反序列化 JSON 响应

如何在 JSON 反序列化期间将引用转换为实例