Android笔记(五十) Android中的JSON数据

JSON是什么:

      JSON是轻量级的文本数据交换格式

      JSON独立于语言和平台

      JSON具有自我描述性,更容易理解

JSON语法:

      数据在名称/值对中

      数据由逗号分割

      大括号表示对象

      中括号表示数组

JSON使用:

MainActivity.java

package cn.lixyz.jsontest.activity;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;

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

import android.app.Activity;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.View;
import cn.lixyz.jsontest.R;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

    }

    public void clickButton(View v) {
        switch (v.getId()) {
        case R.id.bt_readjson:
            readJson();
            break;
        case R.id.bt_writejson:
            writeJson();
            break;
        }
    }

    // 往sdcard中写入文件
    private void writeJson() {

        // 创建一个json对象
        JSONObject root = new JSONObject();
        try {
            // 使用put(kay,value)插入元素
            root.put("class", "三年二班");
            // 常见若干对象,用以加入数组
            JSONObject student1 = new JSONObject();
            student1.put("id", 1);
            student1.put("name", "张三");
            student1.put("age", 10);
            JSONObject student2 = new JSONObject();
            student2.put("id", 2);
            student2.put("name", "李四");
            student2.put("age", 11);
            JSONObject student3 = new JSONObject();
            student3.put("id", 3);
            student3.put("name", "王五");
            student3.put("age", 13);
            JSONObject student4 = new JSONObject();
            student4.put("id", 4);
            student4.put("name", "赵六");
            student4.put("age", 14);
            JSONObject student5 = new JSONObject();
            student5.put("id", 5);
            student5.put("name", "孙七");
            student5.put("age", 15);
            JSONObject student6 = new JSONObject();
            student6.put("id", 6);
            student6.put("name", "刘八");
            student6.put("age", 16);
            // 创建一个json数组
            JSONArray array = new JSONArray();
            // 将之前创建的json对象添加进来
            array.put(student1);
            array.put(student2);
            array.put(student3);
            array.put(student4);
            array.put(student5);
            array.put(student6);

            // 将json数组添加
            root.put("student", array);
            Log.d("TTTT", array.toString());
        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        String packageName = this.getPackageName();
        String jsonFileName = "json.json";
        String sdCardPath = Environment.getExternalStorageDirectory().toString();

        File sdCardPackagePath = new File(sdCardPath + "/" + packageName);
        if (!sdCardPackagePath.exists()) {
            if (sdCardPackagePath.mkdir()) {
                Log.d("TTTT", "创建目录成功");
            } else {
                Log.d("TTTT", "创建目录不成功");

            }

        }

        File jsonFile = new File(sdCardPackagePath + "/" + jsonFileName);
        if (!jsonFile.exists()) {
            try {
                if (jsonFile.createNewFile()) {
                    Log.d("TTTT", "创建文件成功");
                } else {
                    Log.d("TTTT", "创建文件失败");

                }

            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

        try {
            // 将json数据写入文件
            FileWriter fileWriter = new FileWriter(jsonFile);
            fileWriter.write(root.toString());
            fileWriter.flush();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    // 读取assets目录中的json文件
    private void readJson() {
        try {
            // 读取assets目录下的json文件
            InputStreamReader isr = new InputStreamReader(getAssets().open("test.json"), "UTF-8");
            BufferedReader br = new BufferedReader(isr);
            String line;
            StringBuilder builder = new StringBuilder();
            while ((line = br.readLine()) != null) {
                builder.append(line);
            }
            br.close();
            // 获取到json文件中的对象
            JSONObject root = new JSONObject(builder.toString());
            // 使用getString(key)方式获取value
            Log.d("TTTT", "class=" + root.getString("class"));
            // 获取json数组
            JSONArray array = root.getJSONArray("student");
            for (int i = 0; i < array.length(); i++) {
                JSONObject student = array.getJSONObject(i);
                Log.d("TTTT", "id=" + student.getInt("id") + ",name=" + student.getString("name") + ",age="
                        + student.getInt("age"));
            }
        } catch (UnsupportedEncodingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

 

activity_main.xml

<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"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="cn.lixyz.jsontest.activity.MainActivity" >

    <Button
        android:id="@+id/bt_writejson"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="clickButton"
        android:text="@string/writejson" />

    <Button
        android:id="@+id/bt_readjson"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="clickButton"
        android:text="@string/readjson" />

</LinearLayout>

 

/assets/test.json

{
    "student":[
        {"id":1,"name":"张三","age":10},
        {"id":2,"name":"李四","age":11},
        {"id":3,"name":"王五","age":12},
        {"id":4,"name":"赵六","age":13},
        {"id":5,"name":"孙七","age":14},
        {"id":6,"name":"刘八","age":15},
    ],
    "class":"三年二班"    
}

 

posted @ 2015-11-01 17:25  li-xyz  阅读(244)  评论(0编辑  收藏  举报