json数据

json数据包括JSONObject和JSONArray。

即json包括json对象和json数组,json对象中有2种数据结构,对象结构和数组结构。

JSONObject的数据格式:{“名称”:“值”,“名称”:[数组],……}

JSONArray的数据格式:[{“名称”:“值”},{“名称”:[数组]},{“名称”:“值”},……]
JSONArray中包含1个或多个JSONObject

json数据,相当于键值对,下面我们来看一个复杂的json数据

{
    "features":[
        {
            "id":1,
            "geometry":{
                "type":"Point",
                "coordinates":[
                    533958.52189999819,
                    3123489.1460000016
                ]
            }
        },
       {
            "id":1,
            "geometry":{
                "type":"Point",
                "coordinates":[
                    533958.52189999819,
                    3123489.1460000016
                ]
            }
        },
    ]
}

关于java处理json的框架库有Jackson,Gson和FastJson等,我目前只用过fastjson库,Jackson是SpringBoot默认的json解析,听说Gson功能上好,FastJson不建议生产使用,也听过Gson和FastJson两种并行使用。

下面的代码我们用的是fastjson库,Fastjson是一个Java语言编写的JSON处理器,由阿里巴巴公司开发。fastjson是目前java语言中最快的json库,比自称最快的jackson速度要快。

一.生成json数据

1.通过原生生成json数据

//json对象
JSONObject j1 = new JSONObject();
j1.put("type", "Point");    //对象结构
j1.put("coordinates", new double[]{533958.52189999819, 3123489.1460000016});//数组结构

//json数组
JSONArray jsonArray1 = new JSONArray();
jsonArray1.add(j1);

2.json字符串生成json数据

//生成json对象
String stuString = "{\"id\":1,\"age\":2,\"name\":\"zhang\"}";//引号需要转义字符
JSONObject jsonObject1 = JSON.parseObject(stuString);

//生成json数组
String stuString2 = "[{\"id\":1,\"age\":2,\"name\":\"zhang\"}]";//引号需要转义字符
JSONArray jsonArray1 = JSON.parseArray(stuString2);

//上面的JSON换成JSONObject或者JSONArray都可以因为parseObject方法和parseArray方法在JSON中,而JSONObject和JSONArray都继承自JSON

3.json字符串生成对应的类

Student stu1= JSON.parseObject(stuString,Student.class);
List<Student>  stu2= JSON.parseArray(studentLsit,Student.class);
//字符串stuString中存放的是json对象,字符串studentLsit中存放的json数组

4.读取数据

//JSON实际上也是键值对("key":"value")
//key 必须是字符串,value 可以是合法的 JSON 数据类型(字符串, 数字, 对象, 数组, 布尔值或 null)
int a1= js.getIntValue("s1");
long a3= js.getLongValue("s2");
String a2= js.getString("s3");
Object o= js.get("name");
JSONObject js1=js.getJSONObject("s4");
JSONArray js2=js.getJSONArray("s5");

5.通过实体生成json对象和json字符串

Student student = new Student();
student.setId(1);
student.setAge("20");
student.setName("张三");
JSONObject js= (JSONObject) JSON.toJSON(student);//通过实体生成json对象
String stuString = JSON.toJSONString(student);   //通过json类中的方法转换成字符串
String stuString2 = JSON.toJSON(student).toString();//通过Object中的方法转换成字符串
String stuString3 = js.toString();//其实就是调用JSON中的toJSONString方法

ArrayList<Student> studentLsit = new ArrayList<>();
studentLsit.add(student);
JSONArray js2= (JSONArray) JSON.toJSON(studentLsit);//通过实体数组生成json对象
String stuLsitString = JSON.toJSONString(studentLsit);//通过json类中的方法转换成字符串
String stuLsitString2 = JSON.toJSON(studentLsit).toString();//通过Object中的方法转换成字符串
String stuLsitString3 = js2.toString();//其实就是调用JSON中的toJSONString方法
//同理,JSON也可以换成JSONObject或者JSONArray

6.遍历json数组

//遍历json数组
        JSONArray jsonArray=JSONObject.parseArray(data);
        JSONObject object;
        if(jsonArray.size()>0){
            for(int i=0;i<jsonArray.size();++i){
                // 遍历 jsonarray 数组,把每一个对象转成 json 对象
                object =jsonArray.getJSONObject(i);
                String stuString = JSONObject.toJSONString(object);
            }
        }

7.判断是json对象还是json数组

    JSONObject json = JSONObject.parseObject(s1); //得到整个json串
    Object o=json.get("terrainEntity");        //获取到对应的json对象
        if(o instanceof JSONArray){    //判断是那个类
        JSONArray json2=json.getJSONArray("terrainEntity");
    }
        else if(o instanceof JSONObject){
        JSONObject json2=json.getJSONObject("terrainEntity");
    }
//instanceof关键字,是用来判断前面的那个是属于哪个类的

二.总结

根据最上面的json数据,可以看到上面的type和coordinates分别是json的对象结构和数据结构

直接用JSONObject创建即可。

然后就是创建嵌套的json数据

首先我们先要创建一个

            //首先创建一个JSONObject,因为是json的对象结构
            JSONObject jsonObject = new JSONObject();
            JSONArray jsonArray1 = new JSONArray();
            for(int i=0;i<2;++i) {
                //创建一个嵌套的json数据,
                JSONObject j2 = new JSONObject(); 
                j2.put("id", 1);
                JSONObject j21 = new JSONObject();
                j21.put("type", "Point");
                j21.put("coordinates", new double[]{533958.52189999819, 3123489.1460000016});
                j2.put("geometry", j21);
                //数组中,添加每一个json数据
                jsonArray1.add(j2);
            }
            jsonObject.put("features",jsonArray1);

fastjson的apihttps://www.w3cschool.cn/fastjson/fastjson-stream.html

使用fastjson在处理超大文本反序列化,具体是指,把从服务器端获取到的超大json文本数组(每一个json对象中的内容也很多很长,具体有好多键值对),然后我要把这个json数组转换成类对象的数组的时候,就会出错,具体处理方式,这个fastjson好像有超大JSON文本序列化和反序列化的方法,下次遇到了,可以看看学习一下,目前还不会用。

  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值