浅谈JSON数据及fastJson的基本应用

        JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式。采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。

一、JSON数据的语法

以键值对方式的存在,键与值之间,冒号分割,数据由都好进行分割,花括号保存对象,方括号保存数组

在键值对中值可以使用如下的数据:

    数字(整数或浮点数)
    字符串(在双引号中)
    逻辑值(true 或 false)
    数组(在方括号中)
    对象(在花括号中)
    null
常见的两种数据格式:
JSON对象
JSON对象可以在花括号中书写,对象中可以包含多个键值对
{ "firstName":"John" , "lastName":"Doe" }

JSON数组
{
"employees": [
{ "firstName":"John" , "lastName":"Doe" },
{ "firstName":"Anna" , "lastName":"Smith" },
{ "firstName":"Peter" , "lastName":"Jones" }
]
}
var employees = [
{ "firstName":"Bill" , "lastName":"Gates" },
{ "firstName":"George" , "lastName":"Bush" },
{ "firstName":"Thomas" , "lastName": "Carter" }
];
可以像这样访问 JavaScript 对象数组中的第一项:employees[0].lastName;
返回的内容是:Gates
可以像这样修改数据:employees[0].lastName = "Jobs";
或者使用循环遍历,增加if判断取出自己需要的数据,但是大部分情形下需要将json转换为对象,获取对象的属性。

二、JSON数据和对象相互转换:

可以选择很多的三方库,比如神器Gson、阿里的fastJson、jackjson,关于不同Json三方库的选择和比较,在网上有很多内容,,可参考https://blog.csdn.net/vickyway/article/details/48157819的博客,根据自己的情况选择,最终选择了阿里的fastJson.

以前觉得Json和Object的转换很简单,只要调用三方库的给出方法就可以,在自己操作中,遇到一些问题,发现还是比较菜,这个先不管,慢慢学习,先上手操作再说。

转换关系:JSON格式的字符串与JSON对象、Javabean对象之间的转换

JSON:fastJson的解析器,用于JSON格式字符串与JSON对象及javaBean之间的转换。

JSONObject:fastJson提供的json对象。

JSONArray:fastJson提供json数组对象。

我们可以把JSONObject当成一个Map<String,Object>来看,只是JSONObject提供了更为丰富便捷的方法,方便我们对于对象属性的操作。

同样我们可以把JSONArray当做一个List<Object>,可以把JSONArray看成JSONObject对象的一个集合。

此外,由于JSONObject和JSONArray继承了JSON,所以说也可以直接使用两者对JSON格式字符串与JSON对象及javaBean之间做转换,不过为了避免混淆我们还是使用JSON。

首先 要将对象转化为JSON数据格式,对象的对应的类必须有set()和get()方法,否则转换的JSON串显示为{ },没有内容

其次倒包操作就不说了

然后上转换的方法

package com.niuguwang.json;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.alibaba.fastjson.serializer.SimplePropertyPreFilter;
public class FirstFastJson {
    public static void  main(String[] args){
        /*普通对象转换为JSON格式的字符串*/
        person p1= new person("小明", "河北",24);
        String jp1=JSON.toJSONString(p1);
        System.out.println(jp1);
        /*字符串转换为对象
         *但是在后面的转换中,从字符串直接转换为复杂的对象时报错,待查看
         * */
        person po =JSON.parseObject(jp1, person.class);
        System.out.println(po.getAge());
        
        /*字符串转换为JSON对象
         * */
        JSONObject pjo =JSON.parseObject(jp1);
        System.out.println(pjo.getString("name"));
        
        
        student s1 =new student("嚣张", 85);
        student s2 =new student("赵六", 90);
        student s3 =new student("孙琦", 100);
        student[] s={s1,s2,s3};
        System.out.println("数组s"+s);
        
        teacher t1=new teacher("数学",35,s);
        teacher t2=new teacher("语文",50,s);

        teacher[] t ={t1,t2};
        System.out.println("数组t"+t);
        
        person p2=new person("json", "shandong", 12);
        person[] p={p1,p2};
        System.out.println("数组p"+p);
        
        studyclass studyclass=new studyclass(t, p,"文明先进班级");
        System.out.println("初始化对象完成");
//        SimplePropertyPreFilter filter = new SimplePropertyPreFilter(teacher.class, "s");
//        String classjson = JSON.toJSONString(studyclass,filter,SerializerFeature.DisableCircularReferenceDetect);
//        String classjson =JSON.toJSONString(studyclass);
        String classjson =JSON.toJSONString(studyclass, SerializerFeature.DisableCircularReferenceDetect);
        System.out.println(classjson);
        /*将字符串转换为JSON对象*/
        JSONObject studyclass2=JSON.parseObject(classjson);
        System.out.println(studyclass2.getString("classname"));
        System.out.println(studyclass2.getJSONArray("p"));
        /*通过关键字获取JSONArray*/
        JSONArray ja = studyclass2.getJSONArray("p");
        System.out.println(ja.get(1));
        /*通过index获取JSONObject*/
        JSONObject jas=ja.getJSONObject(1);
        System.out.println(jas.getString("name"));
        
    }

}

class person{
    String name;
    String adrees;
    int age;

    public person() {
    }
    /* (non-Javadoc)
     * @see java.lang.Object#toString()
     */
    @Override
    public String toString() {
        return "person [name=" + name + ", adrees=" + adrees + ", age=" + age + "]";
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getAdrees() {
        return adrees;
    }
    public void setAdrees(String adrees) {
        this.adrees = adrees;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public person(String name, String adrees, int age) {
        this.name = name;
        this.adrees = adrees;
        this.age = age;
    }
    
}
class teacher{
    String xuke;
    int age;
    student[] s;
    public teacher(String xuke, int age, student[] s) {
        this.xuke = xuke;
        this.age = age;
        this.s = s;
    }
    public teacher(String xuke, int age) {
        this.xuke = xuke;
        this.age = age;
    }
    public final String getXuke() {
        return xuke;
    }
    public final void setXuke(String xuke) {
        this.xuke = xuke;
    }
    public final int getAge() {
        return age;
    }
    public final void setAge(int age) {
        this.age = age;
    }
    public final student[] getS() {
        return s;
    }
    public final void setS(student[] s) {
        this.s = s;
    }
    
}

class student{
    String name;
    int chengji;
    public student(String name, int chengji) {
        this.name = name;
        this.chengji = chengji;
    }
    public final String getName() {
        return name;
    }
    public final void setName(String name) {
        this.name = name;
    }
    public final int getChengji() {
        return chengji;
    }
    public final void setChengji(int chengji) {
        this.chengji = chengji;
    }
    
}


class studyclass{
       teacher[] t;
       person[] p;
       String classname;
       public void xuexi(){
           System.out.print("班级有班级学习很好");
       }
    public studyclass(teacher[] t, person[] p, String classname) {
        this.t = t;
        this.p = p;
        this.classname = classname;
    }
    public final teacher[] getT() {
        return t;
    }
    public final void setT(teacher[] t) {
        this.t = t;
    }
    public final person[] getP() {
        return p;
    }
    public final void setP(person[] p) {
        this.p = p;
    }
    public final String getClassname() {
        return classname;
    }
    public final void setClassname(String classname) {
        this.classname = classname;
    }
    
       
}
参考了博客https://www.cnblogs.com/cdf-opensource-007/p/7106018.html

猜你喜欢

转载自blog.csdn.net/qq_24126893/article/details/80525097