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#"}
    ]
}

 


效果图:

 

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

activity_main.xml代码:

 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.oak.d4_json.MainActivity">

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="创建"
        android:id="@+id/bt_create"/>
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="读取"
        android:id="@+id/bt_read"/>
    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/tv"/>
</LinearLayout>


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<array.length(); i++){
                        JSONObject object = array.getJSONObject(i);//遍历得到数组中的各个对象
                        int id = object.getInt("id");//获取第一个值
                        String ide = object.getString("ide");//获取第二个值
                        String name = object.getString("name");//获取第三个值
                        tv.append("id"+"="+id+"\n");//显示数据
                        tv.append("ide"+"="+ide+"\n");//显示数据
                        tv.append("name"+"="+name+"\n");//显示数据
                        tv.append("---------------"+"\n");//分割线
                    }
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                } catch (UnsupportedEncodingException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                } catch (JSONException e) {
                    e.printStackTrace();
                }


            }
        });
    }
}


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

 

 

 

By:Brycen Liu

 

 

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值