Android-JSONObject对JSON数据进行创建和读取的操作-刘宇

JSON是JavaScript对象表示法,他和XML差不多,但是比XML更小、更快、更易解析。今天用JSONObject对其进行了创建和解析的实验。JSON数据是由对象或数组组成的,对象里面的数据是以键值对的方式存在的,而数组里面可以存放着很多的对象。

 

实验要求,创建以下的JSON数据并对其进行解析显示到TextView组件中:

{
    "cat":"it",
    "languages":[
        {"id":1,"ide":"Eclipse","name":"Java"},
        {"id":2,"ide":"XCode","name":"Swift"},
        {"id":3,"ide":"Visual Studio","name":"C#"}
    ]
}

 


效果图:

Android-JSONObject对JSON数据进行创建和读取的操作-刘宇_第1张图片

 

下面先创建一个空的项目,然对activity_main.xml和MainActivity.java进行编辑

activity_main.xml代码:

 




    


MainActivity.java代码:

 

 

package com.oak.d4_json;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;

public class MainActivity extends AppCompatActivity {
    private Button bt_create;//声明创建按钮组件变量
    private Button bt_read;//声明读取按钮组件变量
    private File file;//声明一个文件对象
    private TextView tv;//声明TextView组件变量
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        bt_create = (Button) findViewById(R.id.bt_create);//获取到创建按钮组件
        bt_read = (Button) findViewById(R.id.bt_read);//获取到读取按钮组件
        tv = (TextView) findViewById(R.id.tv);//获取到TextView组件

        file = new File(getFilesDir(),"Test.json");//获取到应用在内部的私有文件夹下对应的Test.json文件
        bt_create.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                try {
                    JSONObject root = new JSONObject();//实例一个JSONObject对象
                    root.put("cat","it");//对其添加一个数据

                    JSONArray languages = new JSONArray();//实例一个JSON数组
                    JSONObject lan1 = new JSONObject();//实例一个lan1的JSON对象
                    lan1.put("id",1);//对lan1对象添加数据
                    lan1.put("ide","Eclipse");//对lan1对象添加数据
                    lan1.put("name","Java");//对lan1对象添加数据
                    JSONObject lan2 = new JSONObject();//实例一个lan2的JSON对象
                    lan2.put("id",2);//对lan2对象添加数据
                    lan2.put("ide","XCode");//对lan2对象添加数据
                    lan2.put("name","Swift");//对lan2对象添加数据
                    JSONObject lan3 = new JSONObject();//实例一个lan3的JSON对象
                    lan3.put("id",3);//对lan3对象添加数据
                    lan3.put("ide","Visual Studio");//对lan3对象添加数据
                    lan3.put("name","C#");//对lan3对象添加数据
                    languages.put(0,lan1);//将lan1对象添加到JSON数组中去,角标为0
                    languages.put(1,lan2);//将lan2对象添加到JSON数组中去,角标为1
                    languages.put(2,lan3);//将lan3对象添加到JSON数组中去,角标为2

                    root.put("languages",languages);//然后将JSON数组添加到名为root的JSON对象中去

                    FileOutputStream fos = new FileOutputStream(file);//创建一个文件输出流
                    fos.write(root.toString().getBytes());//将生成的JSON数据写出
                    fos.close();//关闭输出流
                    Toast.makeText(getApplicationContext(),"创建成功!",Toast.LENGTH_SHORT).show();
                } catch (JSONException e) {
                    e.printStackTrace();
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        });
        bt_read.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                try {
                    FileInputStream fis = new FileInputStream(file);//获取一个文件输入流
                    InputStreamReader isr = new InputStreamReader(fis);//读取文件内容
                    BufferedReader bf = new BufferedReader(isr);//将字符流放入缓存中
                    String line;//定义一个用来临时保存数据的变量
                    StringBuilder sb = new StringBuilder();//实例化一个字符串序列化
                    while((line = bf.readLine()) != null){
                            sb.append(line);//将数据添加到字符串序列化中
                    }
                    //关闭流
                    fis.close();
                    isr.close();
                    bf.close();
                    JSONObject root = new JSONObject(sb.toString());//用JSONObject进行解析
                    String cat = root.getString("cat");//获取字符串类型的键值对
                    tv.append("cat"+"="+cat+"\n");//显示数据
                    tv.append("---------------"+"\n");//分割线
                    JSONArray array = root.getJSONArray("languages");//获取JSON数据中的数组数据
                    for (int i=0; i


到这里简单对JSON数据的操作就已经完成了,如果还有童鞋不懂的可以私聊我或者留言,我会第一时间回复的。分享是一种美德,我每天都在做。

 

 

 

By:Brycen Liu

 

 

你可能感兴趣的:(Android)