JAVA中进行JSON解析

前言

Java中进行JSON解析主要有两种较为常用的方法,一种是用Gson进行解析,另一种是用fastjson进行解析,前者是谷歌的,后者是阿里的。

正文

为了方便,先写个内部类出来,然后生成一段JSON格式的字符串

public class Demo5 {
    public static void main(String[] args) {
        // 创建一个景点对象
        Attractions attractions = new Attractions();
        attractions.setName("东方明珠塔");
        attractions.setLocation("浦东新区陆家嘴");
        attractions.setPrice(99.9);

        /**
         * 将attractions对象转为Json
         */
        // 创建Gson对象
        Gson gson = new Gson();
        // 转换
        String s = gson.toJson(attractions);
        System.out.println(s);
    }

    static class Attractions {
        private String name;
        private String location;
        private double price;

        public Attractions() {
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public String getLocation() {
            return location;
        }

        public void setLocation(String location) {
            this.location = location;
        }

        public double getPrice() {
            return price;
        }

        public void setPrice(double price) {
            this.price = price;
        }

        @Override
        public String toString() {
            return "Attractions{" +
                    "name='" + name + '\'' +
                    ", location='" + location + '\'' +
                    ", price=" + price +
                    '}';
        }
    }
}

如上,可生成一段JSON字符串
在这里插入图片描述
这个就当作我们获取到的JSON字符串了。

1.用Gson解析JSON

/**
         * 解析Json
         */
        // 创建Gson对象
        Gson gson1 = new Gson();
        // 解析
        Attractions attractions1 = gson1.fromJson("{\"name\":\"东方明珠塔\",\"location\":\"浦东新区陆家嘴\",\"price\":99.9}", Attractions.class);
        System.out.println(attractions1.getName());

通过创建Gson对象,调用Gson对象的formJson()方法可以将之前的字符串解析成一个Attractions对象(或别的类型),对象中所包含的属性自然也就可以取出来了。
在这里插入图片描述

2.用fastjson解析JSON

/**
         * 解析Json
         */
        Attractions attractions1 = JSON.parseObject("{\"name\":\"东方明珠塔\",\"location\":\"浦东新区陆家嘴\",\"price\":99.9}", Attractions.class);
        System.out.println(attractions1.getName());

fastjson相较于Gson而言,可以不用创建对象,直接调用方法即可;
通过调用JSON的parseObject()方法,可以将JSON字符串解析成指定类型的对象。
当然,用它来创建一个JSON字符串也是很简单的,如:

 /**
         * 将attractions对象转为Json
         */
        String s = JSON.toJSONString(attractions);
        System.out.println(s);

在这里插入图片描述

解析网络上传来的JSON数据

上面两种方式解析的都是已有的字符串,下面就给出个网络上的JSON数据的解析例子以供参考。

package exerciseOfXmlAndJson;

import com.alibaba.fastjson.JSON;


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.util.Hashtable;

public class Demo7 {
    public static void main(String[] args) throws IOException {
        String phone = "18354377892";
        URL url = new URL("http://apis.juhe.cn/mobile/get?phone="+phone+"&dtype=json&key=###");
        // 创建URL连接
        URLConnection uc = url.openConnection();
        // 创建输入流
        InputStream is = uc.getInputStream();
        // 解析并取出数据
        StringBuffer sb = new StringBuffer();
        String str = null;
        try (BufferedReader br = new BufferedReader(new InputStreamReader(is))) {
            // 将每行字符串添加到sb中
            while ((str = br.readLine()) != null) {
                sb.append(str);
            }
            str = sb.toString();
        }
        // 将获取到的数据解析为Hashtable类型的对象
        Hashtable hashtable = JSON.parseObject(str, Hashtable.class);
        Hashtable result = JSON.parseObject(hashtable.get("result").toString(), Hashtable.class);
        if (!"200".equals(hashtable.get("resultcode"))) {
            System.out.println("查询失败");
            return;
        }

        if (result.get("province").equals(result.get("city"))) {
            System.out.println("归属地:" + result.get("city") + "\n运营商:" + result.get("company"));
        }else {
            System.out.println("归属地:" + result.get("province") + "  " + result.get("city") + "\n运营商:" + result.get("company"));
        }
        is.close();

    }
}

这样就可以实现一个手机号码归属地和运营商查询的小东西。
在这里插入图片描述

PS:可以自己找一个提供手机号码归属地查询api的平台申请使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值