分享JSON解析小心得

来源:互联网 发布:群晖nas装windows 编辑:程序博客网 时间:2024/06/10 19:43

前言

    最近用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的解析完全不一样。

原创粉丝点击