zoukankan      html  css  js  c++  java
  • 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":"三年二班"    
    }
  • 相关阅读:
    C# CSV文件读写
    C# 串口通信
    VS项目平台的x86,x64,Any CPU区分
    TcpClient 简单通讯示例
    大龄屌丝自学笔记Java零基础到菜鸟015
    大龄屌丝自学笔记Java零基础到菜鸟011
    大龄屌丝自学笔记Java零基础到菜鸟018
    大龄屌丝自学笔记Java零基础到菜鸟019
    大龄屌丝自学笔记Java零基础到菜鸟017
    大龄屌丝自学笔记Java零基础到菜鸟013
  • 原文地址:https://www.cnblogs.com/xs104/p/4928235.html
Copyright © 2011-2022 走看看