json大家是再熟悉不过的了,JSON是一种轻量级的数据交换格式,在项目开发中,我们经常会使用到json进行数据转换,那图片可以以json的格式提交吗?接下来我们就来给大家讲解一下这方面的内容。
一般来说传图片可以以流的形式来传输,即便是用json传输,一般也都是传一个地址,而图片都存在服务器上,然后顺着地址发送请求下载图片。
但是这次公司的项目中,图片是存在oracle数据库中的blob字段的,并没有存在服务器上,也就是说我必须传图片本身过去,而json是无法传输二进制的文本格式,因此我就想将图片转为字符串形式传输,然后对方再解码然后转换回来就行了。
我的方法分三个步骤:
1.将图片转为字节数组
2.将字节数组转为字符串
3.压缩字符串,放入json传输
首先是第一步,将图片转为字节数组,代码如下:
/** * 将图片转换为字节数组 * @return */ private byte[] loadImage(File file){ //用于返回的字节数组 byte[] data=null; //打开文件输入流 FileInputStream fin=null; //打开字节输出流 ByteArrayOutputStream bout=null; try{ //文件输入流获取对应文件 fin=new FileInputStream(file); //输出流定义缓冲区大小 bout=new ByteArrayOutputStream((int)file.length); //定义字节数组,用于读取文件流 byte[] buffer=new byte[1024]; //用于表示读取的位置 int len=-1; //开始读取文件 while((len=fin.read(buffer))!=-1){ //从buffer的第0位置开始,读取至第len位置,结果写入bout bout.write(buffer,0,len); } //将输出流转为字节数组 data=bout.toByteArray(); //关闭输入输出流 fin.close(); bout.close(); }catch(Exception e){ e.printStackTrace(); } return data; }
然后是第二步,将字节数组转为字符串
/** * 把字节数组转化为字符串----"ISO-8859-1" * @param date * @return */ private String byteToString(byte[] data){ String dataString=null; try{ //将字节数组转为字符串,编码格式为ISO-8859-1 dataString=new String(data,"ISO-8859-1"); }catch(Exception e){ e.printStackTrace(); } return dataString; }
接下来就是最后一步,将字符串压缩后返回
/** * 压缩字符串----"ISO-8859-1" * @param data * @return */ private String compress(String data){ String finalData=null; try{ //打开字节输出流 ByteArrayOutputStream bout=new ByteArrayOutputStream(); //打开压缩用的输出流,压缩后的结果放在bout中 GZIPOutpuStream gout=new GZIPOutputStream(bout); //写入待压缩的字节数组 gout.write(data.getBytes("ISO-8859-1")); //完成压缩写入 gout.finish(); //关闭输出流 gout.close(); finalData=bout.toString("ISO-8859-1"); }catch(Exception e){ e.printStackTrace(); } return finalData; }
json格式如何转换?
jar包引用
<!-- fastjson --><dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.46</version></dependency> < !--JSONObject.fromObject-- > <dependency> <groupId>net.sf.json-lib</groupId> <artifactId>json-lib</artifactId> <version>2.4</version> <classifier>jdk15</classifier></dependency>
MapuserMap = new HashMap<>(); userMap.put("id",2); userMap.put("name","name");JSONObject jsonParam = new JSONObject(); jsonParam.put("params", userMap);
Map转json对象
该方法引用的是json-lib包
JSONObject jsonObject = JSONObject.fromObject(data);
Map转Json字符串
String userBody = JSON.toJSONString(userMap);
Map格式Json字符串转Map
String resultBody = "一个Json字符串";Map userResult= JSON.parseObject(resultBody,Map.class);
Json字符串转List
String loadData= "一个Json字符串";List loadDataResult = JSONArray.parseArray(loadData,Map.class);
List转Json数组
JSONArray array= JSONArray.parseArray(JSON.toJSONString(varList));
实体转Json字符串
WebServiceResult webServiceResult = new WebServiceResult();ObjectMapper mapper = new ObjectMapper();String result = mapper.writeValueAsString(webServiceResult);
Json转换的数据方便大家的阅读以及理解,所以对于json相关操作,大家一定要熟悉,这样才能进行json相关操作!最后大家如果想要了解更多json工具教程知识,敬请关注奇Q工具网。
推荐阅读: