安卓案例:读取与解析JSON

安卓案例:读取与解析JSON

一、运行效果

安卓案例:读取与解析JSON_第1张图片

先单击【解析JSON】按钮,会弹出吐司提示用户先读取Json文件:

安卓案例:读取与解析JSON_第2张图片

单击【读取JSON】按钮:

安卓案例:读取与解析JSON_第3张图片

单击【解析JSON】按钮:

安卓案例:读取与解析JSON_第4张图片


二、实现步骤

1、创建安卓应用ParseJson


2、切换到Project视图,在main目录下创建assets目录



将项目切换回Android视图:


3、在assets目录下创建test.json文件

[
  {
    "id": 1,
    "name": "计算机基础教程",
    "press": "清华大学出版社",
    "author": "李晓云",
    "price": 30.5
  },
  {
    "id": 2,
    "name": "Java程序设计",
    "press": "水利水电出版社",
    "author": "张国锋",
    "price": 40
  },
  {
    "id": 3,
    "name": "安卓应用开发",
    "press": "北京大学出版社",
    "author": "郑晓华",
    "price": 60.5
  },
  {
    "id": 4,
    "name": "PHP应用开发教程",
    "press": "南京大学出版社",
    "author": "滕玉国",
    "price": 27.5
  }
]

4、主布局文件activity_main.xml




    

        

5、字符串资源文件strings.xml



    读取与解析JSON
    读取JSON
    解析JSON

6、修改模块的build.gradle文件,添加依赖



7、主界面类MainActivity


package net.hw.parse_json;

import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;

import org.apache.http.util.EncodingUtils;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.io.IOException;
import java.io.InputStream;

/**
 * Created by howard on 2018/3/14.
 */
public class MainActivity extends Activity {
    /**
     * 文件内容字符串
     */
    private String content;
    /**
     * 文件内容标签
     */
    private TextView tvContent;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // 利用布局资源文件设置用户界面
        setContentView(R.layout.activity_main);

        // 通过资源标识获得控件实例
        tvContent = findViewById(R.id.tv_content);
    }

    /**
     * 读取Json文件
     *
     * @param view
     */
    public void doReadJson(View view) {
        try {
            // 读取assets目录里的test.json文件,获取字节输入流
            InputStream is = getResources().getAssets().open("test.json");
            // 获取字节输入流长度
            int length = is.available();
            // 定义字节缓冲区
            byte[] buffer = new byte[length];
            // 读取字节输入流,存放到字节缓冲区里
            is.read(buffer);
            // 将字节缓冲区里的数据转换成utf-8字符串
            content = EncodingUtils.getString(buffer, "utf-8");
            // 将字符串显示在标签里
            tvContent.setText(content);
            // 设置标签文本颜色
            tvContent.setTextColor(Color.BLUE);
            // 关闭输入流
            is.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 解析Json
     *
     * @param view
     */
    public void doParseJson(View view) {
        // 判断用户是否读取了Json文件
        if (content == null) {
            Toast.makeText(this, "请先读取Json文件!", Toast.LENGTH_SHORT).show();
        } else {
            try {
                // 清空标签内容
                tvContent.setText("");
                // 基于content字符串创建Json数组
                JSONArray jsonArray = new JSONArray(content);
                // 遍历Json数组
                for (int i = 0; i < jsonArray.length(); i++) {
                    // 通过下标获取json数组元素——Json对象
                    JSONObject jsonObject = jsonArray.getJSONObject(i);
                    // 对Json对象按键取值
                    int id = jsonObject.getInt("id");
                    String name = jsonObject.getString("name");
                    String press = jsonObject.getString("press");
                    String author = jsonObject.getString("author");
                    double price = jsonObject.getDouble("price");
                    // 拼接成一本图书信息
                    String book = "编号:" + id
                            + "\n书名:" + name
                            + "\n出版社:" + press
                            + "\n作者:" + author
                            + "\n单价:" + price + "\n\n";
                    // 将图书信息追加到标签里
                    tvContent.append(book);
                }
                // 设置标签文本颜色
                tvContent.setTextColor(Color.RED);
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }
    }
}

8、运行程序,查看效果


先单击【解析JSON】按钮,会弹出吐司提示用户先读取Json文件:


单击【读取JSON】按钮:


单击【解析JSON】按钮:


三、课堂练习

1、修改读取JSON按钮的单击事件处理代码,要求采用缓冲输入流BufferReader来读取json文件。

2、编写一个解析Json字符串的安卓程序,界面包含一个编辑框、一个按钮和一个标签,编辑框用于输入Json字符串,单击按钮,将解析的内容显示在标签里。


用于测试的Json字符串1:

{
       "id" : 1 ,
      "name" : "李国强" ,
      "gender" : "男" ,
       "age" : 30 ;
       "address" :{ "country" : "中国" , "province" : "四川" , "city" : "泸州" , "street" : "丹霞路" , "num" : "20号" }
}

用于测试的Json字符串2:

[
     {
             "id" : 1 ,
             "name" : "李国强" ,
             "gender" : "男" ,
             "age" : 30 ;
             "address" :{ "country" : "中国" , "province" : "四川" , "city" : "泸州" , "street" : "丹霞路" , "num" : "20号" }
     },
     {
             "id" : 2 ,
             "name" : "张三丰" ,
             "gender" : "男" ,
             "age" : 40 ;
             "address" :{ "country" : "中国" , "province" : "湖南" , "city" : "长沙" , "street" : "人民路" , "num" : "18号" }
     },
     {
             "id" : 3 ,
             "name" : "唐晓芙" ,
             "gender" : "女" ,
             "age" : 20 ;
             "address" :{ "country" : "中国" , "province" : "广东" , "city" : "珠海" , "street" : "天虹路" , "num" : "2号" }
     }    
]

你可能感兴趣的:(安卓应用开发)