是JavaScript Object Notation的简写,基于JavaScript语言的的轻量级的数据交换格式,即用来传输数据的一种格式。
JSON采用名值对的方式来表示一个对象的信息,同时支持无限层的嵌套。
JSON的本质是一串字符串,只不过元素使用特定的符号标注。
例如:用JSON串表示一个学生的基本信息,可以这么写:
{name:’zhangsan’,age:’20’,sex:’male’}
表示多个学生的基本信息:
[{name:’zhangsan’,age:’20’,sex:’male’},{name:’lisi’,age:’21’,sex:’male’}]
和用XML表示的信息相比,用JSON表示相同的信息,在传输的过程中极大的减少了信息的传输量,但是在可读性方面JSON串就比XML格式差。
解析JSON字符串的基本思路是把解析出来的信息放到一个实体类中去,在使用的时候创建一个对应的实例对象,取出对应的值。
在Android Studio有GsonFormat插件可以快速创建实体类对象。
方法一:
1.Android studio File->Settings..->Plugins–>Browse repositores..搜索GsonFormat
2.安装插件,重启android studio
方法二:
1.下载GsonFormat.jar ;
2.Android studio File->Settings..->Plugins –>install plugin from disk..导入下载GsonFormat.jar
3.重启android studio
解析JSON需要导入jar包json-lib.jar,由于Android系统内置了对JSON的支持,所以不用再导入jar包。
解析JSON对象(即以”{“开始的JSON字符串)要用JSONO bject类,解析JSON数组(即以”[“开始的JSON字符串)要用JSONArray类。
例1:JSON字符串转换为实例对象
Student类:
public class Student {
private String name;
private int age;
private String sex;
public Student(){
}
public Student(String name, int age, String sex) {
this.name = name;
this.age = age;
this.sex = sex;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
@Override
public String toString() {
return "Student [name=" + name + ", age=" + age + ", sex=" + sex + "]";
}
}
public class JSONTest1 {
//JSON字符串--->对象
public static void main(String[] args) throws JSONException {
String data = "{name:'zhangsan',age:'20',sex:'male'}";
JSONObject json = new JSONObject(data);
Student student = new Student();
student.setName(json.getString("name"));
student.setAge(json.getInt("age"));
student.setSex(json.getString("sex"));
System.out.println(student);
}
}
例2:JSON字符串转换为多个实例对象
public class JSONTest2 {
//JSON字符串--->对象(多个)
public static void main(String[] args) throws JSONException {
String data = "[{name:'zhangsan',age:20,sex:'male'},{name:'zhangsan1',age:30,sex:'female'}]";
JSONArray jsonArray = new JSONArray(data);
Student student;
List studentList = new ArrayList();
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject jsonObject = jsonArray.getJSONObject(i);
student = new Student();
student.setName(jsonObject.getString("name"));
student.setAge(jsonObject.getInt("age"));
student.setSex(jsonObject.getString("sex"));
studentList.add(student);
}
for (Student s : studentList) {
System.out.println(s);
}
}
}
例3:集合转换为JSON字符串
public class JSONTest3 {
//集合----->JSON字符串
public static void main(String[] args) throws JSONException {
Student student ;
List studentList = new ArrayList();
student = new Student("zhangsan",20,"man");
studentList.add(student);
student = new Student("lisi",30,"man");
studentList.add(student);
JSONArray jsonArray = new JSONArray(studentList);
System.out.println(jsonArray);
}
}
例4:对象转换为JSON字符串
public class JSONTest4 {
// 对象----->JSON字符串
public static void main(String[] args) throws JSONException {
Student student;
student = new Student("zhangsan", 20, "man");
JSONObject jsonObject = new JSONObject(student);
System.out.println(jsonObject);
}
}
Gson 是 Google 提供的用来在 Java 对象和 JSON 数据之间进行映射的 Java 类库。可以将一个 JSON 字符串转成一个 Java 对象,或者反过来。
2.1 Gson解析原理:
2.2Gson使用
在eclipse项目中需要导入jar包gson-2.2.4.jar,在Android Studio中 的APP中build.gradle文件中添加”compile ‘com.google.code.gson:gson:2.5’”
Gson常用的方法是通过反射的机制对json字符串进行解析。
例1:JSON字符串转换为对象
public class GsonTest1 {
public static void main(String[] args) throws Exception, Exception {
String data = "{name:'zhangsan',age:20,sex:'male'}";
Gson gson = new Gson();
Student student = new Student();
student = gson.fromJson(data, Student.class);
System.out.println(student);
}
}
例2:JSON字符串转换为多个对象的集合
public class GsonTest2 {
//json字符串--->集合
public static void main(String[] args) {
String data = "[{name:'zhangsan',age:20,sex:'male'},{name:'zhangsan1',age:30,sex:'female'}]";
Gson gson = new Gson();
List studentList = new ArrayList();
TypeToken> token = new TypeToken>(){};
studentList=gson.fromJson(data, token.getType());
System.out.println(studentList);
}
}
例3:对象转换为JSON字符串
public class GsonTest3 {
public static void main(String[] args) {
Student student ;
Gson gson = new Gson();
List studentList = new ArrayList();
student = new Student("zhangsan",20,"man");
studentList.add(student);
student = new Student("lisi",30,"man");
studentList.add(student);
//对象--->json字符串
String data = gson.toJson(student, Student.class);
System.out.println("对象--->json字符串:"+data);
//集合--->json字符串
TypeToken> token = new TypeToken>(){};
String data1 = gson.toJson(studentList, token.getType());
System.out.println("集合--->json字符串:"+data1);
}
}
一个阿里巴巴的开源解析工具,采用java语言编写而成,没有依赖于第三方的类库,除了JDK外,性能好,速度快。
3.1 Fastjson使用
使用Fastjson需要导入fastjson-1.1.22.jar包。
Fastjson API入口类是com.alibaba.fastjson.JSON,常用的序列化操作都可以在JSON类上的静态方法直接完成。
// 把JSON文本parse为JavaBean
public static final T parseObject(String text, Class clazz);
//把JSON文本parse成JavaBean集合
public static final List parseArray(String text, Class clazz);
// 将JavaBean序列化为JSON文本
public static final String toJSONString(Object object);
例1:JSON字符串转换为对象
public class FastJsonTest1 {
public static void main(String[] args) {
String data = "{name:'zhangsan',age:20,sex:'male'}";
Student student = JSON.parseObject(data,Student.class);
System.out.println(student);
}
}
例2:JSON字符串转换为多个对象
public class FastJsonTest2 {
public static void main(String[] args) {
String data = "[{'name':'zhangsan','age':'20',sex:'male'},{'name':'zhangsan1',age:30,sex:'female'}]";
List studentList = JSON.parseArray(data, Student.class);
System.out.println("字符串-->多个对象:");
System.out.println(studentList);
}
}
例3:多个实例对象转换为JSON字符串
public class FastJsonTest3 {
public static void main(String[] args) {
Student student = new Student();
List studentList = new ArrayList<>() ;
student = new Student("zhangsan",20,"man");
studentList.add(student);
student = new Student("lisi",30,"man");
studentList.add(student);
String data = JSON.toJSONString(studentList);
System.out.println(data);
}
}
与JSON字符串处理有关的工具:
谷歌浏览器插件JSON-handle:http://download.csdn.net/detail/w_next/9479948
或在谷歌商店中搜索JSON-handle
科学上网工具1(壁虎漫步):https://gecko.la/?code=null&index=1
科学上网工具2(修改host文件):http://laod.cn/