和别人合作的一个Java项目,现在有一个业务,我向他那边请求用户的信息,他返回的是一串JSON,结果这串JSON里面包含有图片信息,我现在头很大,不知道怎么把图片转出来,我把这串JSON转成LIST对象后图片相关的信息截图如下:
JSON部分字符串如下:
万分感谢!
base64格式的么?可以参考下这个 http://t.csdn.cn/dIKTD
可以找对方协商,图片用base64格式传输,或者确认下图片是以什么格式传输的,
如果是byte[] 的,可以用FileUtils.writeByteArrayToFile(byteArray);转换成文件
package AllMusic;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
public class HttpUtil {
//获取响应体
public String GetHttp(String url,int mark) {
// 获取一页带音乐id的json数据
StringBuffer body=new StringBuffer();
CloseableHttpClient httpClient = HttpClients.createDefault();
HttpGet HttpGet = new HttpGet(url);
if(mark==1) {
// 设置请求头
HttpGet.setHeader("csrf", "AOPHIP5DF2M");
HttpGet.setHeader("Cookie",
"_ga=GA1.2.207336405.1578105222; _gid=GA1.2.1290422414.1578105222; Hm_lvt_cdb524f42f0ce19b169a8071123a4797=1578105222,1578105233,1578123281; Hm_lpvt_cdb524f42f0ce19b169a8071123a4797=1578123667; _gat=1; kw_token=AOPHIP5DF2M");
}
CloseableHttpResponse response;
try {
response = httpClient.execute(HttpGet);
InputStream inputStream = response.getEntity().getContent();
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, "utf-8"));
String s = "";
while ((s = reader.readLine()) != null) {
body.append(s);
}
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return body.toString();
}
//下载音乐
public void DownLoadMusic(String url, String musicName) {
CloseableHttpClient httpClient = HttpClients.createDefault();
HttpGet HttpGet = new HttpGet(url);
CloseableHttpResponse response;
InputStream inputStream = null;
FileOutputStream outputStream = null;
try {
response = httpClient.execute(HttpGet);
inputStream = response.getEntity().getContent();
// 创建输出流
File file = new File("C:/Users/Edward/Desktop/music/" + musicName + ".mp3");
outputStream = new FileOutputStream(file);
// 创建缓冲区
byte[] buffer = new byte[1024*1024];
int temp;
while ((temp = inputStream.read(buffer)) != -1) {
outputStream.write(buffer,0,temp);
}
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
outputStream.close();
inputStream.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
提取并操作JSON中的图片信息,可以按照以下步骤进行操作:
首先,根据参考资料中的“获取json对象中的值”的方法,可以读取JSON中图片信息的键值,并将其赋值给一个字符串变量,例如imgData。
接着,可以使用Java的BASE64解码方法将imgData转换为二进制数据。
最后,将二进制数据转换为图片格式,可以使用Java的ImageIO类对图片进行操作,例如ImageIO.read()方法读取图片,或者ImageIO.write()方法将图片写入到指定路径。
具体的代码实现如下(以读取一张图片为例):
// 读取JSON中图片信息的键值
String imgData = jsonObject.getString("imgData");
// 将BASE64编码的字符串imgData转换为二进制数据
byte[] imageBytes = DatatypeConverter.parseBase64Binary(imgData);
// 将二进制数据转换为BufferedImage格式
BufferedImage image = ImageIO.read(new ByteArrayInputStream(imageBytes));
// 对图片进行操作,例如保存到本地
File outputfile = new File("image.png");
ImageIO.write(image, "png", outputfile);
需要注意的是,BASE64解码方法需要使用Java内置的DatatypeConverter类,因此需要在代码顶部引入此类:
import javax.xml.bind.DatatypeConverter;
直接json串转json对象或者json数组取需要的数据即可