图片可以以json的格式提交吗?json格式如何转换?

json大家是再熟悉不过的了,JSON是一种轻量级的数据交换格式,在项目开发中,我们经常会使用到json进行数据转换,那图片可以以json的格式提交吗?接下来我们就来给大家讲解一下这方面的内容。

图片可以以json的格式提交吗.jpg

一般来说传图片可以以流的形式来传输,即便是用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>

Map转JSONObject

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工具网。

推荐阅读:

qt如何创建桌面快捷方式?Windows平台qt怎么安装?

java初学者推荐哪本书?java初学者值得拥有的几本书!

fastjson怎么使用?fastjson用法汇总