1、用Gson解析时,业务类的成员变量、内部类的成员变量可以是private权限(当然,也可以是public权限),代码如下:
①业务类:
public class JiuJiuDomain {
private List<JiuJiuListItem> list;
private static class JiuJiuListItem{
private String rp_type;
private String num_iid;
private String deal_num;
private String title;
private String pic_url;
private String now_price;
private String show_time;
private String origin_price;
private String discount;
private String start_discount;
private String is_vip_price;
private String ling_value;
private String is_onsale;
private String total_love_number;
private String total_hate_number;
private String is_buy_sale;
@Override
public String toString() {
return "JiuJiuListItem [rp_type=" + rp_type + ", num_iid=" + num_iid
+ ", deal_num=" + deal_num + ", title=" + title + ", pic_url="
+ pic_url + ", now_price=" + now_price + ", show_time="
+ show_time + ", origin_price=" + origin_price + ", discount="
+ discount + ", start_discount=" + start_discount
+ ", is_vip_price=" + is_vip_price + ", ling_value="
+ ling_value + ", is_onsale=" + is_onsale
+ ", total_love_number=" + total_love_number
+ ", total_hate_number=" + total_hate_number + ", is_buy_sale="
+ is_buy_sale + "]";
}
}
@Override
public String toString() {
return "JiuJiuDomain [list=" + list + "]";
}
}
②Gson解析代码:
Gson gson = new Gson();
JiuJiuDomain jiuJiuDomain = gson.fromJson(jsonString, JiuJiuDomain.class);
System.out.println("jiuJiuDomain=" + jiuJiuDomain);
2、用FastJson解析时,业务类的成员变量、内部类的成员变量必须都是public权限,否则解析出的变量值会为null,代码如下:
①业务类:
JiuJiuDomain jiuJiuDomain = JSON.parseObject(jsonString, JiuJiuDomain.class);
System.out.println("jiuJiuDomain=" + jiuJiuDomain);
射全部成员变量的方法(Class类的getDeclaredFields() 方法),getFields()方法和getDeclaredFields() 方法的执行效率明显是有差异的。没看过源码,以上仅为猜测
。
①业务类:
public class JiuJiuDomain {
private List<JiuJiuListItem> list;
private static class JiuJiuListItem{
private String rp_type;
private String num_iid;
private String deal_num;
private String title;
private String pic_url;
private String now_price;
private String show_time;
private String origin_price;
private String discount;
private String start_discount;
private String is_vip_price;
private String ling_value;
private String is_onsale;
private String total_love_number;
private String total_hate_number;
private String is_buy_sale;
@Override
public String toString() {
return "JiuJiuListItem [rp_type=" + rp_type + ", num_iid=" + num_iid
+ ", deal_num=" + deal_num + ", title=" + title + ", pic_url="
+ pic_url + ", now_price=" + now_price + ", show_time="
+ show_time + ", origin_price=" + origin_price + ", discount="
+ discount + ", start_discount=" + start_discount
+ ", is_vip_price=" + is_vip_price + ", ling_value="
+ ling_value + ", is_onsale=" + is_onsale
+ ", total_love_number=" + total_love_number
+ ", total_hate_number=" + total_hate_number + ", is_buy_sale="
+ is_buy_sale + "]";
}
}
@Override
public String toString() {
return "JiuJiuDomain [list=" + list + "]";
}
}
②Gson解析代码:
Gson gson = new Gson();
JiuJiuDomain jiuJiuDomain = gson.fromJson(jsonString, JiuJiuDomain.class);
System.out.println("jiuJiuDomain=" + jiuJiuDomain);
2、用FastJson解析时,业务类的成员变量、内部类的成员变量必须都是public权限,否则解析出的变量值会为null,代码如下:
①业务类:
把第1点中的业务类的private全替换为public。
JiuJiuDomain jiuJiuDomain = JSON.parseObject(jsonString, JiuJiuDomain.class);
System.out.println("jiuJiuDomain=" + jiuJiuDomain);
总结:
FastJson比Gson解析快,有可能与解析时采用的反射方法有关,FastJson使用了只反射公有成员变量的反射方法(Class类的getFields()方法),而Gson使用了反
射全部成员变量的方法(Class类的getDeclaredFields() 方法),getFields()方法和getDeclaredFields() 方法的执行效率明显是有差异的。没看过源码,以上仅为猜测
。