前言
本人学生一枚,现阶段也是进行Android学习,若文章中有什么错误
,请大l佬
指出。
每篇格言:
我可以一落千丈,我偏要一鸣惊人。
复制代码
用GSON框架技术解析JSON
GSON框架的官网:https://mvnrepository.com/artifact/com.google.code.gson/gson
-
如果使用
Eclipse
可发选择相应版本的jar包进行下载 复制代码
-
如果使用
Android Studio
开发通过Gradle,直接添加以来,不用下载jar包 复制代码
Gson解析JSON对象(介绍都在代码注释中)
重要的事说一遍:
注意在使用Gson解析JSON对象时,记得创建JavaBean类,并且JavaBean类中的属性名要和JSON的key的名称相同,否则解析就会失败
JSON数据
{"num": 1,"age": 20,"data": {"chinese": 100,"english": 90}
}
复制代码
移动端
- 结构:
重要的事说两遍:
注意在使用Gson解析JSON对象时,记得创建JavaBean类,并且JavaBean类中的属性名要和JSON的key的名称相同,否则解析就会失败
- Data
public class Data {private int chinese;private int english;public int getChinese() {return chinese;}public void setChinese(int chinese) {this.chinese = chinese;}public int getEnglish() {return english;}public void setEnglish(int english) {this.english = english;}@Overridepublic String toString() {return "Data{" +"chinese=" + chinese +", english=" + english +'}';}
}
复制代码
重要的事说三遍:
注意在使用Gson解析JSON对象时,记得创建JavaBean类,并且JavaBean类中的属性名要和JSON的key的名称相同,否则解析就会失败
- Student
public class Student {private int num;private int age;private Data data;public int getNum() {return num;}public void setNum(int num) {this.num = num;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public Data getData() {return data;}public void setData(Data data) {this.data = data;}@Overridepublic String toString() {return "Student{" +"num=" + num +", age=" + age +", data=" + data +'}';}
}
复制代码
- NetWorkUtils
public class NetWorkUtils {private static HttpURLConnection sHttpURLConnection;private static BufferedReader sBufferedReader;private static InputStream sInputStream;/*** 通过URL获取String** @param urlStr 需要传入的URL* @param requestWay 需要传入的请求方式(GET/POST)* @return 返货获取的json字符串*/public static String sendUrlGetString(String urlStr, String requestWay) {String jsonStr = null;try {// 创建URL对象URL url = new URL(urlStr);// 创建HttpURLConnection对象sHttpURLConnection = (HttpURLConnection) url.openConnection();// 设置网络的请求方式sHttpURLConnection.setRequestMethod(requestWay);// 设置链接主机超时sHttpURLConnection.setConnectTimeout(8000);// 设置从主机读取数据超时sHttpURLConnection.setReadTimeout(8000);// 获取输入流sInputStream = sHttpURLConnection.getInputStream();// 对获取到的输入流进行读取sBufferedReader = new BufferedReader(new InputStreamReader(sInputStream));StringBuffer stringBuffer = new StringBuffer();String line = "";while ((line = sBufferedReader.readLine()) != null) {stringBuffer.append(line);}jsonStr = stringBuffer.toString();return jsonStr;} catch (MalformedURLException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} finally {if (sBufferedReader != null) {try {sBufferedReader.close();} catch (IOException e) {e.printStackTrace();}}if (sHttpURLConnection != null) {sHttpURLConnection.disconnect();}}return jsonStr;}}
复制代码
- MainActivity
public class MainActivity extends AppCompatActivity implements View.OnClickListener {private TextView mJsonTxt;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initViews();}private void initViews() {Button gsonBtn = findViewById(R.id.gson_btn);gsonBtn.setOnClickListener(this);mJsonTxt = findViewById(R.id.json_txt);}@Overridepublic void onClick(View view) {switch (view.getId()) {case R.id.gson_btn:new Thread(new Runnable() {@Overridepublic void run() {paraseJSONWithGSON(NetWorkUtils.sendUrlGetString("http://xxx:8080/JsonThree", "GET"));}}).start();break;}}private void paraseJSONWithGSON(final String str) {runOnUiThread(new Runnable() {@Overridepublic void run() {// 创建一个Gson对象Gson gson = new Gson();// 调用Gson对象的fromJson(String str,Class<T> class)// 第一个参数 : 通过网络请求获取的JSON字符串// 第二个参数 : 传入一个JavaBean对象Student student = gson.fromJson(str, Student.class);mJsonTxt.setText(student.toString());}});}}复制代码
Gson解析JSON数组(介绍都在代码注释中)
JSON数据
[{"id": 1,"name": "Amy","age": 20},{"id": 2,"name": "Tom","age": 10}
]
复制代码
移动端
- People
public class People {private int id;private String name;private int age;public int getId() {return id;}public void setId(int id) {this.id = id;}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;}@Overridepublic String toString() {return "People{" +"id=" + id +", name='" + name + '\'' +", age=" + age +'}';}
}
复制代码
- MainActivity
public class MainActivity extends AppCompatActivity implements View.OnClickListener {private TextView mJsonTxt;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initViews();}private void initViews() {Button gsonArrayBtn = findViewById(R.id.gsonArray_btn);gsonArrayBtn.setOnClickListener(this);mJsonTxt = findViewById(R.id.json_txt);}@Overridepublic void onClick(View view) {switch (view.getId()) {case R.id.gsonArray_btn:new Thread(new Runnable() {@Overridepublic void run() {paraseJSONWithGSONArray(NetWorkUtils.sendUrlGetString("http://XXX:8080/JsonTwo", "GET"));}}).start();break;}}private void paraseJSONWithGSONArray(final String s) {runOnUiThread(new Runnable() {@Overridepublic void run() {// 创建Gson对象Gson gson = new Gson();// 如果解析一段JSON数组会稍微麻烦点。我们需要借助TypeToken将期望解析成的数据类型传入到fromJson方法中。List<People> peopleList = gson.fromJson(s, new TypeToken<List<People>>() {}.getType());for (People people : peopleList) {mJsonTxt.setText("id = " + people.getId() + "\n" + "name = " + people.getName() + "\n" + "age = " + people.getAge());}}});}
}复制代码
总结
当然本篇文章中都是一些简单的JSON数据格式,适合入门学习,当然在实际开发中会很复杂的JSON数据格式,到时候大家见招拆招,不要死记解析步骤。
复制代码