频道栏目
首页 > 程序开发 > 移动开发 > 其他 > 正文
用json方式存储数据
2016-11-30 09:49:35         来源:linzhihan7410的博客  
收藏   我要投稿

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 pro = new ArrayList();   
    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 list = new ArrayList();
        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();
    }
点击复制链接 与好友分享!回本站首页
相关TAG标签 json 存储数据
上一篇:MediaPlayer
下一篇:cocos2dx 常用动作使用指南
相关文章
图文推荐
点击排行

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站