分享JSON解析小心得

前言

    最近用Retrofit+fastjson进行JSON数据的实体化编程。对碰到的问题做个记录。

附赠工具:

    先提供个JSON在线网站:http://www.bejson.com/   还是挺好用的,够简洁

请先看段JSON

片段一:

{
    "animals":{
	"dog":[
		{"name":"Rufus","breed":"labrador","count":1,"twoFeet":false},
		{"name":"Marty","breed":"whippet","count":1,"twoFeet":false}
	],
	"cat":{"name":"Matilda"}
    },
    "anim_type":"thpe"
}

问题一: 仔细看animals跟anim_type跟dog标签有什么区别?

他们都是key,仅仅是具体的value不一样


问题二:这三个标签的value有什么区别?

朋友们,一般来说,JSON也就这么几个符号,{}   []  ""

{}代表的是 类,[]代表的是数组,""代表的字符串


问题三:如果这三个标签混用会怎么用?比如我们将anim标签改成了 "animales":"{[xxxxxxxx]}"

我们暂不管xxxx是什么内容,可以看得出来用""扩上后,自然就变成了字符串。

那么,这里就不再是一个对象,也不会是一个数组,而是一个字符串。


问题四:如何才能保证JSON数据解析的快速正确无误?

1. 服务端必须要有使用工具进行解析,比如JSONFormat,BeJSON,拒绝手动编写,稳定的后端JSON格式输出是关键

2. 使用实体化编程。前后端统一才能彻底解决问题。


问题五:博主你说这些有毛用?

在JSON编写中,乃至整个程序的其他编码过程中,实体化是非常有必要的。(为什么有必要就不讨论了,自己体会)

这里我要说的是   意图

一个良好的编码习惯,最少要能让编写意图   跟 编写结果  保持一致

这里{}是对象,"{}"就是字符串,当你用"" 去扩 {},那是  将  对象  改变成  字符串。  这显然是编程意图的不明确导致。

表面上看,一点问题都没有,实际上,确确实实的违背了数据格式在设计时的初衷。。。


现在再来看一份以上JSON转换的对象

代码1:

package com.besjon.pojo;

public class JsonRootBean {

    private Animals animals;
    private String anim_type;
    public void setAnimals(Animals animals) {
        this.animals = animals;
    }
    public Animals getAnimals() {
        return animals;
    }

    public void setAnim_type(String anim_type) {
        this.anim_type = anim_type;
    }
    public String getAnim_type() {
        return anim_type;
    }
}

代码2:

package com.besjon.pojo;

public class Dog {

    private String name;
    private String breed;
    private int count;
    private boolean twoFeet;
    public void setName(String name) {
        this.name = name;
    }
    public String getName() {
        return name;
    }

    public void setBreed(String breed) {
        this.breed = breed;
    }
    public String getBreed() {
        return breed;
    }

    public void setCount(int count) {
        this.count = count;
    }
    public int getCount() {
        return count;
    }

    public void setTwoFeet(boolean twoFeet) {
        this.twoFeet = twoFeet;
    }
    public boolean getTwoFeet() {
        return twoFeet;
    }
}

代码3:

package com.besjon.pojo;

public class Cat {

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

代码4:

package com.besjon.pojo;
import java.util.List;

public class Animals {

    private List<Dog> dog;
    private Cat cat;
    public void setDog(List<Dog> dog) {
        this.dog = dog;
    }
    public List<Dog> getDog() {
        return dog;
    }


    public void setCat(Cat cat) {
        this.cat = cat;
    }
    public Cat getCat() {
        return cat;
    }
}

最后,看个有趣的东西,谁能告诉我有什么区别?


大家看看这两图。小区别。有大变化。使用fastJSON的解析完全不一样。

猜你喜欢

转载自blog.csdn.net/wangxueming/article/details/77394651
今日推荐