4.4 JSON解析

使用网络爬虫向服务器发送请求时,服务器经常返回包含JSON字符串的数据,此时需要对服务器返回的JSON字符串进行解析。目前,主流的JSON解析框架有org.json、Gson以及阿里巴巴开源的Fastjson,本节以Fastjson为例演示如何解析JSON字符串。

1.引入依赖
Fastjson是阿里巴巴公司基于Java语言开发的高性能且完善的JSON操作类库。使用前,在Maven工程的pom.xml文件中配置所需要的dependency。

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

2.常用方法

方法说明
JSONObject parseObject(String text)将字符串解析为JSONObject
JSONArray parseArray(String text)将字符串解析为JSONArray
JSONArray getJSONArray(int index)获取JSONArray
JSONObject getJSONObject(int index)获取JSONObject
String getString(int index)获取键值

3.使用Fastjson解析结构如下图所示的json字符串
在这里插入图片描述

//省份对象
@Data
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class Province {
    private String name;

    private String capital;

    private String abbreviation;

    private List<String> cityList;
}
//程序4-5
public class JsonParse {
    public static void main(String[] args) {
        String str = "[{\n" +
                "\t\t\"名称\": \"江苏省\",\n" +
                "\t\t\"省会\": \"南京\",\n" +
                "\t\t\"简称\": \"苏\",\n" +
                "\t\t\"辖市\": [\"南京\", \"无锡\", \"徐州\", \"常州\"]\n" +
                "\t},\n" +
                "\t{\n" +
                "\t\t\"名称\": \"浙江省\",\n" +
                "\t\t\"省会\": \"杭州\",\n" +
                "\t\t\"简称\": \"浙\",\n" +
                "\t\t\"辖市\": [\"杭州\", \"温州\", \"嘉兴\", \"绍兴\"]\n" +
                "\t},\n" +
                "\t{\n" +
                "\t\t\"名称\": \"安徽省\",\n" +
                "\t\t\"省会\": \"合肥\",\n" +
                "\t\t\"简称\": \"皖\",\n" +
                "\t\t\"辖市\": [\"合肥\", \"马鞍山\", \"滁州\", \"芜湖\"]\n" +
                "\t}\n" +
                "]";
        JSONArray jsonArray = JSONArray.parseArray(str);
        if(jsonArray != null && jsonArray.size() > 0){
            List<Province> provinceList = new ArrayList<>();
            for(int i = 0;i < jsonArray.size();i++){
                Province province = new Province();

                JSONObject jsonObject = jsonArray.getJSONObject(i);
                province.setName(jsonObject.getString("名称"));
                province.setAbbreviation(jsonObject.getString("省会"));
                province.setCapital(jsonObject.getString("简称"));

                JSONArray cityJsonArray = jsonObject.getJSONArray("辖市");
                List<String> cityList = new ArrayList<>();
                if(cityJsonArray != null && cityJsonArray.size() > 0) {

                    for(int j = 0;j < cityJsonArray.size();j++){
                        cityList.add(cityJsonArray.getString(j));
                    }
                }
                province.setCityList(cityList);

                provinceList.add(province);
            }
            for(int k = 0;k < provinceList.size();k++){
                System.out.println(provinceList.get(k));
            }
        }
    }
}

程序4-5运行结果如下图所示。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值