用json方式存储数据

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/linzhihan7410/article/details/53402576

SON(JavaScript Object Notation)
是一种轻量级的数据交换格式.它基于ECMAScript的一个子集.JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C、C++、C#、Java、JavaScript、Perl、Python等),
这些特性使JSON成为理想的数据交换语言,易于人阅读和编写,同时也易于机器解析和生成(一般用于提升网络传输速率).

JSON的数据格式(有四种格式)
{“品名”:”无人机”,”等级”:”一级”,”重量”:”1kg”}

{“品名”:”无人机”,”等级”:”一级”,”重量”:”1kg”},{“品名”:”机器人”,”产地”:”中国”}

{ “产品”:[{“品名”:”无人机”,”等级”:”一级”,”重量”:”1kg”},{“品名”:”机器人”,”产地”:”中国”}]}

var shp={“品名”:”无人机”,”等级”:”一级”,”重量”:”1kg”}

UI实现:以两个EditText做用户输入,创建3个按键,一个按键用于添加用户数据 一个按键用于保存为JSON格式数据 一个按键用于读取JSON格式数据

代码流程:用安卓JsonWriter把数据存储为json格式
零.用户添加数据
一.调用输出流输出数据
二.调用安卓JsonWriter输出流
三.开始写json格式
四.放入参数名和参数值
五.结束写json格式
六.关闭输出流

代码:

//在MainActivity
    public class MainActivity extends Activity {
    //用于得到用户输入的数据
    private EditText typeEdit;  
    private EditText pmerEdit;
    //创建一个ArrayList用于存放数据
    private static ArrayList<Product> pro = new ArrayList<Product>();   
    private String path = android.os.Environment.getExternalStorageDirectory()+"/json.json";
    //Product类为数据类,里面有两个参数,一个是输入数据的品名,一个数据的值
    public class Product{
        String type;
        String pmer;
        public Product(String type,String pmer){
            this.type = type;
            this.pmer = pmer;
        }
    }

    //添加数据按键事件
    public void addDataOnClick(View v) throws IOException {
        //得到UI的两个控件,并得到用户输入的数据
        typeEdit = (EditText) findViewById(R.id.typeEdit);
        pmerEdit = (EditText) findViewById(R.id.pmerEdit);
        String type = typeEdit.getText().toString();
        String pmer = pmerEdit.getText().toString();

        //调用输入流读数据
        FileInputStream in = new FileInputStream(path);
        InputStreamReader inRead = new InputStreamReader(in,"utf-8");
        //调用安卓JsonReader输入流
        JsonReader jr = new JsonReader(inRead);
        //开始读json格式                    //如果读的数据是"{",就调用reader.beginObject(); "{ }"保存的是非数组数据,“[ ]”保存的是数组数据;
                                            //如果读的数据是"[",就调用reader.beginArray();
        jr.beginArray();
        while (jr.hasNext()){               //循环读取每个内容(这个循环是用于防止程序关闭后再打开,会把原来的数据替换,用户读取以前保存好的数据)
            String type1=null;              //用于临时存放读取到的值
            String pmer1=null;
            jr.beginObject();               
            while (jr.hasNext()){               //循环读取每个内容
                String name = jr.nextName();    //获得参数名
                if(name.equals("Value Type")){  //如果参数名=Value Type
                    type1 = jr.nextString();    //就获得编号的值
                }
                else if(name.equals("Parameter")){   //如果参数名=Parameter,就获得名称的值.
                    pmer1 = jr.nextString();         //可以使用jr.skipValue();做忽略,如果不需要这个参数名
                }
            }
            jr.endObject();                         //结束读json格式
            pro.add(new Product(type1,pmer1));      //然后创建一个Product类,把读取到的数据存进去,添加到list里
        }
        jr.endArray();                              //结束读json格式     

        pro.add(new Product(type, pmer));           //添加用户输入的新数据
        Toast.makeText(getApplicationContext(),"Add Success!!",Toast.LENGTH_SHORT).show();//提示一下
    }
    //要注意:每一层“{ }”或“[ ]”都要用while(reader.hasNext){}循环读取,有几层就用几个.

    //数据存储为json格式按键事件
    public void saveDataOnClick(View v) throws IOException {
        //调用输出流输出数据
        FileOutputStream out = new FileOutputStream(path);
        OutputStreamWriter outWri = new OutputStreamWriter(out,"utf-8");
        //调用安卓JsonWriter输出流
        JsonWriter jw = new JsonWriter(outWri);
        //开始写json格式 
        jw.beginArray();                               
        //放入参数名和参数值
        for(Product p:pro){
            jw.beginObject();                           
            jw.name("Value Type").value(p.type);
            jw.name("Parameter").value(p.pmer);
            jw.endObject();                             
        }
        //结束写json格式
        jw.endArray();                              
        //关闭输出流 
        outWri.flush();
        jw.close();
        //提示
        Toast.makeText(getApplicationContext(),"Save Success!!",Toast.LENGTH_SHORT).show();
    }

代码流程:用安卓JsonReader读取json格式的数据
一.调用输入流读数据
二.调用安卓JsonReader输入流
三.开始读json格式
四.读内容(while循环)
五.结束读json格式
六.处理读取的数据
七.关闭输入流

代码

//读取json格式的数据按键事件(和添加数据里的读取已经保存的数据的代码是一样的)
    public void readJsonOnClick(View v) throws IOException {
        ArrayList<Product> list = new ArrayList<Product>();
        FileInputStream in = new FileInputStream(path);
        InputStreamReader inRead = new InputStreamReader(in,"utf-8");

        JsonReader jr = new JsonReader(inRead);

        jr.beginArray();            

        while (jr.hasNext()){
            String type=null;
            String pmer=null;
            jr.beginObject();       
            while (jr.hasNext()){
                String name = jr.nextName();
                if(name.equals("Value Type")){
                    type = jr.nextString();
                }
                else if(name.equals("Parameter")){
                    pmer = jr.nextString();         
                }
            }
            jr.endObject();
            list.add(new Product(type,pmer));
        }
        jr.endArray();
        //处理读取的数据
        String ss="";
        for (Product p:list){
            ss+="Value Type: "+p.type+" Parameter: "+p.pmer+"\n";
        }
        Toast.makeText(getApplicationContext(),ss,Toast.LENGTH_LONG).show();
        jr.close();
    }

猜你喜欢

转载自blog.csdn.net/linzhihan7410/article/details/53402576