接下来这段时间我会不定期的更新博客,大多数是关于Android方面,后续也会提供一些面试经验等等。
JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式,解析Json数据首先是需要获取或者创建一个json数据,然后再一步步把数据进行解析。在接下来每次做测试的时候,我都会给大家提供一个json的测试数据。
测试数据:
{
“id”: 2,
“name”: “wcl”,
“price”: 520
}
解析json数据的时候,第一步我们需要去获取json数据,然后才开始解析。
在解析数据的时候有两种方法:
两种方式都可以获得数据,没有什么多大的区别,建议采用第二种方式,因为第二种方式不会报告空指针异常的情况。
我在这里创建了一个Demo_1的class文件主要是为了存储解析后的json对象。
json数据:
[
{
“id”: 2,
“name”: “wcl”,
“price”: 520
},
{
“id”: 3,
“name”: “czl”,
“price”: 520
}
]
解析JSON数组一般采用JSONArray去解析
json数据
{
“re_code”: “1000”,
“date”: {
“count”: 2,
“items”: [{
“id”: 2,
“name”: “wcl”,
“price”: 520
},
{
“id”: 3,
“name”: “czl”,
“price”: 520
}
]
},
“re_msg”: “success”
}
这一款工具是帮助我们快速生成JSON数据所对应的的Java对象的,使用方法Alt+Enter+s
JSON数据:
{
“re_code”: “1000”,
“date”: {
“items”: {
“0”: {
“id”: 2,
“name”: “wcl”,
“price”: 520
},
“1”: {
“id”: 3,
“name”: “czl”,
“price”: 520
}
}
}
}
为什么说这是一个特殊的JSON数据呢,因为数字在Java中不能作为类名的,当我们用JSONFormat工具时会发现它并不会帮我正确的创建,那么我们该怎么办呢?
首先创建一个class类
import java.util.List;
public class Demo_3 {
/**
* re_code : 1000
* date : {"items":{"0":{"id":2,"name":"wcl","price":520},"1":{"id":3,"name":"czl","price":520}}}
*/
private String re_code;
private List<FileBean> list;
@Override
public String toString() {
return "Demo_3{" +
"re_code='" + re_code + '\'' +
", list=" + list +
'}';
}
public String getRe_code() {
return re_code;
}
public void setRe_code(String re_code) {
this.re_code = re_code;
}
public List<FileBean> getList() {
return list;
}
public void setList(List<FileBean> list) {
this.list = list;
}
public static class FileBean{
private int id;
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 getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
private String name ;
private int price;
@Override
public String toString() {
return "FileBean{" +
"id=" + id +
", name='" + name + '\'' +
", price=" + price +
'}';
}
}
}
其次我们再来解析JSON数据
package com.c201801080119.demo2;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
private Button button;
private TextView textView;
private TextView textView1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
InitView();
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
/*首先获取或创建json数据*/
String json="{\n" +
"\t\"re_code\": \"1000\",\n" +
"\t\"date\": {\n" +
"\t\t\"items\": {\n" +
"\t\t\t\"0\": {\n" +
"\t\t\t\t\"id\": 2,\n" +
"\t\t\t\t\"name\": \"wcl\",\n" +
"\t\t\t\t\"price\": 520\n" +
"\t\t\t},\n" +
"\t\t\t\"1\": {\n" +
"\t\t\t\t\"id\": 3,\n" +
"\t\t\t\t\"name\": \"czl\",\n" +
"\t\t\t\t\"price\": 520\n" +
"\t\t\t}\n" +
"\t\t}\n" +
"\t}\n" +
"}";
Demo_3 demo_3=new Demo_3();
/*解析json数据*/
try {
/*第一层解析*/
JSONObject jsonObject=new JSONObject(json);
String re_code = jsonObject.optString("re_code");
JSONObject list = jsonObject.optJSONObject("date");
/*第一层封装*/
demo_3.setRe_code(re_code);
List<Demo_3.FileBean> lists=new ArrayList<>();
demo_3.setList(lists);
/*第二层解析*/
for(int i=0;i<list.length();i++){
JSONObject jsonObject1 = list.optJSONObject(i + "");
if(jsonObject1!=null){
int id = jsonObject1.optInt("id");
String name = jsonObject1.optString("name");
int price = jsonObject1.optInt("price");
/*第二层封装*/
Demo_3.FileBean fileBean=new Demo_3.FileBean();
fileBean.setId(id);
fileBean.setName(name);
fileBean.setPrice(price);
lists.add(fileBean);
}
}
} catch (JSONException e) {
e.printStackTrace();
}
/*打印json数据*/
textView.setText(json);
textView1.setText(demo_3.toString());
}
});
}
private void InitView(){
textView=findViewById(R.id.textView);
button=findViewById(R.id.button);
textView1=findViewById(R.id.textView2);
}
}
json数据:
{
“id”: 2,
“name”: “wcl”,
“price”: 520
}
json数据
[{
“id”: 2,
“name”: “wcl”,
“price”: 520
},
{
“id”: 3,
“name”: “czl”,
“price”: 520
}
]
json数据:
{
“id”: 2,
“name”: “wcl”,
“price”: 520
}
json数据
[{
“id”: 2,
“name”: “wcl”,
“price”: 520
},
{
“id”: 3,
“name”: “czl”,
“price”: 520
}
]
1.疏远的原因大概是我需要你的时候,而你恰好都不在。 2.有的人对你好,是因为...
前言 MongoDB 是由C++语言编写的,是一个基于分布式且面向文档存储的开源数据库...
前言: 在各类技术岗位面试中,似乎 MySQL 相关问题经常被问到。无论你面试开发...
global.asa script LANGUAGE=VBScript RUNAT=Server Sub Application_OnStart db...
最近一个项目中,有一个读取某个文件夹下所有文件的功能。使用了ThinkPHP + layu...
目录 一、字典与集合课后题 练习前置知识 Chapter One : 开启 Python 之旅 Chapt...
1. 背景 最近在工作中,需要实现网页端图片上传到FTP服务器的功能。上传文件是用...
什么是网页?html文档经过浏览器内核渲染后展示出来的页面( 五大主流浏览器及四...
DEDECMS文章页加入的链接都默认不是在新窗口打开。百度一下,都是关于FCKeditor...
它可和PHP、JavaScript、ASP、ASP.NET、ColdFusion、Java、以及ABAP等不同的编程...