Json解析

1.什么是Json

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

对象类型数据字符串

{
    "id":"1",
    "courseID":"化学",
    "title":"滴定实验",
    "content":"下周二实验楼201必须完成"
}

数组类型数据字符串

[
    {
        "id":"1",
        "courseID":"数学",
        "title":"一加一等于几"
    },
    {
        "id":"2",
        "courseID":"语文",
        "title":"请背诵全文"
    }
] 

2.解析Json框架种类

2.1.JSONObject and JSONArray

android原生解析框架

2.1.1.json字符串转JSONArray或JSONObject对象
//json字符串最外层是大括号时,转换成JSONObject
JSONObject jsonObject = new JSONObject(jsonObjectStr);

//json字符串最外层是方括号时,JSONArray
JSONArray jsonArray = new JSONArray(jsonArrayStr);
2.1.2.从JSONArray中获得JSONObject对象
 for (int i = 0; i < jsonArray.length(); i++) {
    JSONObject jsonObject = jsonArray.getJSONObject(i);
 }
2.1.3.从JsonObject获取JSON内的具体数据
jsonObject.getBoolean("");
jsonObject.getDouble("");
jsonObject.getInt("");
jsonObject.getJSONArray("");
jsonObject.getJSONObject("");
jsonObject.getLong("");
jsonObject.getString("");

2.2.Gson

2.2.1.创建方式
  • 直接new Gson创建
    使用new Gson(),此时会创建一个带有默认配置选项的Gson实例,如果不想使用默认配置,那么就可以使用GsonBuilder。
Gson gson = new Gson();
  • 使用GsonBuilder
Gson gson = new GsonBuilder()
         .excludeFieldsWithoutExposeAnnotation() //不对没有用@Expose注解的属性进行操作
         .enableComplexMapKeySerialization() //当Map的key为复杂对象时,需要开启该方法
         .serializeNulls() //当字段值为空或null时,依然对该字段进行转换
         .setDateFormat("yyyy-MM-dd HH:mm:ss:SSS") //时间转化为特定格式
         .setPrettyPrinting() //对结果进行格式化,增加换行
         .disableHtmlEscaping() //防止特殊字符出现乱码
         .registerTypeAdapter(User.class,new UserAdapter()) //为某特定对象设置固定的序列或反序列方式,自定义Adapter需实现JsonSerializer或者JsonDeserializer接口
         .create();
2.2.2.注解
public class User {
  @Expose
  private String firstName;

  @Expose(serialize = false)
  private String lastName;

  @Expose(deserialize = false)
  private String emailAddress;

  @SerializedName("pwd")
  private String password;
}
  • @Expose
    @Expose中serialize和deserialize属性是可选的,默认两个都为true。
    如果serialize为true,调用toJson时会序列化该属性,
    如果deserialize为true,调用fromJson生成Java对象时不会进行反序列化。

  • @SerializedName
    能指定该字段在序列化成json时的名称

    注意:如果采用new Gson()方式创建Gson,@Expose没有任何效果。需要使用 gsonBuilder.excludeFieldsWithoutExposeAnnotation()方法。

2.2.3.序列化(把Bean转换成Json格式字符串)
//序列化Bean
String jsonStr = gson.toJson(user, User.class);
//序列化集合
String jsonStr2 = gson.toJson(list);
2.2.4.反序列化(json字符串转为对象)
//反序列化Bean
Student user= gson.fromJson(jsonStr, User.class);
//反序列化集合
List<User> retList = gson.fromJson(jsonStr2,new TypeToken<List<User>>(){}.getType());

2.3.FastJson

常见问题
Android版本

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值