Json是什么?
是一种轻量级的数据交换格式,与XML一样,被采用的客户端和服务端交互的解决方案,具有良好的可读和便于快速编写的特性。
Json的格式规范:
就像协议一样,json肯定也会有一套规范的规则。
数据在名称/值对中,数据由逗号分隔开,花括号保存对象,方括号保存数组。
比如:
[
{ “id”:“1”,“name”:“基神”,“age”:“18” },
{ “id”:“2”,“name”:“B神”,“age”:“18” },
{ “id”:“3”,“name”:“曹神”,“age”:“18” }
]
Android 提供了Json解析的类:
JSONObject : json对象,可以完成Json字符串与java对象的相互转换
JSONArray : json数组,可以完成json字符串与java集合或对象的相互转换
JSONStringer : json文本构建类,这个类可以帮助快速和快捷的创建JSON text ,每个JSONStringer 实体只能对应创建一个JSON text
JSONTokener : json解析类
JSONException : json异常
创建json对应的类:
public class Person {
private String id;
private String name;
private String age;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
}
创建Json解析类:
public class GsonManager {
public static GsonManager getInstance(){
return Holder.INSTANCE;
}
private static class Holder{
private static final GsonManager INSTANCE = new GsonManager();
}
public List<Person> parseJson(String json){
List<Person> list = new ArrayList<>();
try {
JSONArray jsonArray = new JSONArray(json);
for (int i = 0 ; i < jsonArray.length() ; i++){
JSONObject object = (JSONObject) jsonArray.get(i);
Person person = new Person();
person.setId(object.getString("id"));
person.setName(object.getString("name"));
person.setAge(object.getString("age"));
list.add(person);
}
return list;
} catch (JSONException e) {
e.printStackTrace();
return null;
}
}
}
public class MainActivity extends AppCompatActivity {
private static final String TAG = "MainActivity";
private static final String Json = "[\n" +
" { \"id\":\"1\",\"name\":\"基神\",\"age\":\"18\" },\n" +
" { \"id\":\"2\",\"name\":\"B神\",\"age\":\"18\" },\n" +
" { \"id\":\"3\",\"name\":\"曹神\",\"age\":\"18\" }\n" +
"]";
private List<Person> personList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
personList = GsonManager.getInstance().parseJson(Json);
Log.d(TAG, "first person's name :" + personList.get(0).getName());
}
}
使用Gson解析json:
Gson 是Google提供的用来在Java对象和JSON数据之间进行映射的java类库
下载Gson的jar包放在lib目录下
(1)Gson的创建
Gson gson = new Gson();
或者通过GsonBuilder(),可以设置多种配置:
Gson gson = new GsonBuilder()
.setLenient()// json宽松
.enableComplexMapKeySerialization()//支持Map的key为复杂对象的形式
.serializeNulls() //智能null
.setPrettyPrinting()// 调教格式
.disableHtmlEscaping() //默认是GSON把HTML 转义的
.create();
(2)Gson的基本使用:
Gson提供了fromGson() 和 toJson()两个直接用于解析和生成的方法,前者实现反序列化,后者实现序列化,同时两个方法都提供了重载方法
a>基本数据的解析:
Gson gson = new Gson();
int i = gson.fromJson("100" , int.class); //100
boolean b = gson.fromJson("true" , boolean.class);
b>简单的java Object 序列化
加入有一个person类,有id ,name ,age三个属性
Person person = new Person("1" , "haha" , "23");
使用Gson将它序列化:
Gson gson = new Gson();
String personJson = gson.toJson(person);
c>简单的java Object反序列化
Gson gson = new Gson();
Person person = gson.fromJson(personJson , Person.class);