SpringBoot请求网页接口数据返回JSON以及将JSON数据转化为对象

SpringBoot中, 我们有时需要将网页的数据接口的数据进行获取,然后将JSON数据转为对象,这里有我尝试过的方法,能够使用。

首先有一个网页接口有许多数据,类型为JSON,比如我所使用的这个数据地址,点击打开

大致结构如下

{"code":0,"data":[{"close":"596","createdDate":1406160000000,"high":"608.3","low":"596","marketFrom":0,"open":"605.9","type":3,"volume":"7.68"},{"close":"596.1","createdDate":1406246400000,"high":"603.98","low":"596","marketFrom":0,"open":"596","type":3,"volume":"35.282"}],"detailMsg":"","msg":""}

然后我们需要先导入所需的依赖:

<dependency>
       <groupId>org.json</groupId>
        <artifactId>json</artifactId>
        <version>20180130</version>
</dependency>

接下来是最主要的方法,方法返回获取到的JSON数据,是一个JSONObject对象

import org.json.JSONObject;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

public class GetJson {
    public JSONObject getHttpJson(String url, int comefrom) {
        try {
            URL realUrl = new URL(url);
            HttpURLConnection connection = (HttpURLConnection) realUrl.openConnection();
            connection.setRequestProperty("accept", "*/*");
            connection.setRequestProperty("connection", "Keep-Alive");
            connection.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
            // 建立实际的连接
            connection.connect();
            //请求成功
            if (connection.getResponseCode() == 200) {
                InputStream is = connection.getInputStream();
                ByteArrayOutputStream baos = new ByteArrayOutputStream();
                //10MB的缓存
                byte[] buffer = new byte[10485760];
                int len = 0;
                while ((len = is.read(buffer)) != -1) {
                    baos.write(buffer, 0, len);
                }
                String jsonString = baos.toString();
                baos.close();
                is.close();
                //转换成json数据处理
                // getHttpJson函数的后面的参数1,表示返回的是json数据,2表示http接口的数据在一个()中的数据
                JSONObject jsonArray = getJsonString(jsonString, comefrom);
                return jsonArray;
            }
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException ex) {
            ex.printStackTrace();
        }
        return null;
    }

    public JSONObject getJsonString(String str, int comefrom){
        JSONObject jo = null;
        if(comefrom==1){
            return new JSONObject(str);
        }else if(comefrom==2){
            int indexStart = 0;
            //字符处理
            for(int i=0;i<str.length();i++){
                if(str.charAt(i)=='('){
                    indexStart = i;
                    break;
                }
            }
            String strNew = "";
            //分割字符串
            for(int i=indexStart+1;i<str.length()-1;i++){
                strNew += str.charAt(i);
            }
            return new JSONObject(strNew);
        }
        return jo;
    }
}

得到了JSONObject对象以后,如何转为对象呢?我们先创建一个实体类,属性与获取的JSON属性一致

public class BtcoinEntity {
    private Long id;
    //开
    private String open;
    //收
    private String close;
    //时间
    private Date createdDate;
    //高
    private String high;
    //低
    private String low;
    //量
    private String volume;
    private String marketFrom;
    private String type;
    //省略getter和setter
}

然后导入将JSON转为对象的依赖

<dependency>
   <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.47</version>
</dependency>

最后就是调用了

//访问获得json数据
        JSONObject dayLine = new GetJson().getHttpJson(address,1);
//        System.out.println(dayLine);
        //取得data的json数据
        JSONArray json=dayLine.getJSONArray("data");
        //将json数据转化为对象列表
        List<BtcoinEntity> list= JSON.parseArray(json.toString(),BtcoinEntity.class);

由于我们的对象数据只在data中,所以取出data所携带的数据,然后就是关键代码了JSON.parseArray(json.toString(),BtcoinEntity.class);
这样就将JSON数据转化为对象列表了,注意属性名要一致,否则会报错!
到这里就大功告成,如果还需要做持久化等处理就看自己的需求了。

猜你喜欢

转载自blog.csdn.net/rui15111/article/details/80974172