Java获取静态网页json数据,解析需要数据并以json格式返回

package FixtureAcquisition;//赛程获取

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 爬取赛程
 * */
public class CrawlSchedule {
    public static void main(String[] args) {
        String htmlUrl = "https://webapi.sporttery.cn/gateway/lottery/getFootBallMatchV1.qry?param=90,0&lotteryDrawNum=23012&sellStatus=0&termLimits=11";//网址路径
        String json = getJson(htmlUrl);
        System.out.println(json);
        System.out.println(getMatchMessage(json));

    }
/**
 * 获取json字符串
 * */
    private static String getJson(String path) {
        // 保存整个html文档的数据
        StringBuffer html = new StringBuffer();
        try {
            // 发起一个url网址的请求
            URL url = new URL(path);
            URLConnection connection = url.openConnection();
            // 设置请求头
            connection.addRequestProperty("Accept", "application/json");
            // 获取网页的数据流
            InputStream input = connection.getInputStream();
            InputStreamReader reader = new InputStreamReader(input, "UTF-8");
            BufferedReader bufferedReader = new BufferedReader(reader);
            // 解析并且获取InputStream中具体的数据,并且输出到控制台
            String line = "";
            while ((line = bufferedReader.readLine()) != null) {
                html.append(line);
            }
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return html.toString();
    }
/**
 * 处理json字符串,这部分因需求而异,这里处理比较繁琐也比较占用内存资源(因为循环遍历创建map集合)
 * */
    public static String getMatchMessage(String str){
         String str1 = str.substring(0, str.indexOf("sfcMatch"));
        String str2 = str.substring(str1.length() + 1, str.length());
        String str3 = "{s" + str2;
        str3 = str3.substring(0,str3.length() - 1);
        String str4 = str3.substring(0,str3.indexOf("matchList")-1);
        String str5 = "{" + str3.substring(str4.length(),str3.length()) + "}";
        str5 = str5.substring(0,str5.indexOf("sfclist") - 2);
//        str5.substring(0,str5.length() - 22)
        JSONObject jsonObject =  JSON.parseObject(str5);
        System.out.println(jsonObject);
        JSONObject json1 = (JSONObject) JSONObject.toJSON(jsonObject);
        JSONArray temp = JSONArray.parseArray(json1.getString("matchList"));

        List lists = new ArrayList<>();
        for(int i = 0;i < temp.size();i++){
            Map<String,String> map = new HashMap<>();
            JSONObject obj = (JSONObject)temp.get(i);
            map.put("联赛",obj.getString("matchName"));
            map.put("场次",obj.getString("matchNum"));
            map.put("主队",obj.getString("masterTeamName"));
            map.put("客队",obj.getString("guestTeamName"));
            map.put("开赛时间",obj.getString("startTime"));

            lists.add(map);
        }
        String json = JSON.toJSON(lists).toString();//Java中的list转为json
        return json;

    }
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中,使用JSON解析库将Java对象转换为JSON时,默认情况下是不会包含静态变量的。因为静态变量是类级别的变量,属于整个类的共享数据,与对象的状态无关,而JSON主要用于传递对象的状态信息。 JSON序列化和反序列化的过程是基于实例化的对象进行的,只会处理对象的实例变量。静态变量是类级别的,不随对象的创建和销毁而改变,所以在转换为JSON时,通常忽略静态变量。 如果需要静态变量也包含在JSON中,可以通过特殊处理实现。可以在Java类中定义 getter 方法来获取静态变量的值,并在转换为JSON时,手动添加这些静态变量的键值对。示例代码如下: ```java import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.node.ObjectNode; public class MyClass { private int instanceVariable; private static int staticVariable = 10; public int getInstanceVariable() { return instanceVariable; } public void setInstanceVariable(int instanceVariable) { this.instanceVariable = instanceVariable; } public static int getStaticVariable() { return staticVariable; } public static void main(String[] args) throws Exception { MyClass obj = new MyClass(); obj.setInstanceVariable(20); ObjectMapper mapper = new ObjectMapper(); ObjectNode rootNode = mapper.createObjectNode(); rootNode.put("instanceVariable", obj.getInstanceVariable()); rootNode.put("staticVariable", getStaticVariable()); String json = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(rootNode); System.out.println(json); } } ``` 输出结果为: ``` { "instanceVariable" : 20, "staticVariable" : 10 } ``` 这样,JSON中就包含了静态变量的值。但需要注意的是,通常不建议在JSON中包含静态变量,因为这可能会破坏对象的封装性和数据一致性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值