zoukankan      html  css  js  c++  java
  • 数据存储(三)--JSON数据处理

        JSON是一种轻量级的数据交换格式,具有良好的可读和便于高速编写的特性,从而能够在不同平台间进行数据交换。JSON採用兼容性非常高的文本格式,同一时候也具备类似于C语言体系的行为。JSON能够将Java对象转成json格式的字符串,能够将json字符串转换成Java。比XML更轻量级,Json使用起来比較轻便和简单。JSON数据格式,在Android中被广泛运用于client和server通信,在网络传输数据与解析时非常方便。

    JSONObject--这是系统中有关JSON定义的基本单元,其包括一对儿(Key/Value)数值。
    JSONArray--它代表一组有序的数值。将其转换为String输出(toString)所表现的形式是用方括号包裹,数值以逗号”,”分隔(比如:[value1,value2,value3]
    JSONStringer--这个类能够帮助高速和便捷的创建JSONtext。其最大的长处在于能够降低因为格式的错误导致程序异常,引用这个类能够自己主动严格依照JSON语法规则(syntaxrules)创建JSON text。每一个JSONStringer实体仅仅能相应创建一个JSON text。
    JSONTokener--json解析类

    JSONException--json中用到的异常 


    以下以数据存储(二)中的Book对象用Json格式转为String

    public static String ObjectToJsonString(List<Book> books) throws JSONException
    	{
    		JSONStringer stringer = new JSONStringer();
    		stringer.object();
    		stringer.key("books");
    		stringer.array();
    		for(int i=0;i<books.size();i++)
    		{
    			stringer.object();
    			stringer.key("book:name").value(books.get(i).getName());
    			stringer.key("book:id").value(books.get(i).getId());
    			stringer.key("book:price").value(books.get(i).getPrice());
    			stringer.key("book:publisher").value(books.get(i).getPublisher());
    			stringer.key("book:count").value(books.get(i).getCount());
    			stringer.endObject();
    		}
    		stringer.endArray();
    		stringer.endObject();
    		return stringer.toString();
    	}

    String 转为Book对象

    public static List<Book> jsonStringToObject(String str) throws JSONException
    	{
    		List<Book> books = new ArrayList<Book>();
    		JSONTokener jsonTokener = new JSONTokener(str);
    		JSONObject jsonObject = (JSONObject) jsonTokener.nextValue();
    		JSONArray array =jsonObject.getJSONArray("books");
    		for(int i =0;i<array.length();i++)
    		{
    			Book book = new Book();
    			JSONObject temp = ((JSONObject) array.get(i));
    			book.setName(temp.getString("book:name"));
    			book.setId(temp.getString("book:id"));
    			book.setPrice(temp.getString("book:price"));
    			book.setPublisher(temp.getString("book:publisher"));
    			book.setCount(temp.optInt("book:count"));
    			books.add(book);
    		}
    		return books;
    	}
    注:

    getXXX()能够将要获取的键的值转换为指定的类型,假设无法转换或没有值则抛出JSONException 
    optXXX()也是将要获取的键的值转换为指定的类型,无法转换或没有值时返回用户提供或这默认提供的值


  • 相关阅读:
    hdu4554 A Famous Game 概率期望
    【BZOJ】【1552】【Cerc2007】robotic sort / 【3506】【CQOI2014】排序机械臂
    【BZOJ】【1007】【HNOI2008】水平可见直线
    【BZOJ】【1025】【SCOI2009】游戏
    【BZOJ】【1024】【SCOI2009】生日快乐
    【BZOJ】【1023】【SHOI2008】cactus仙人掌图
    【BZOJ】【3504】【CQOI2014】危桥
    【BZOJ】【1021】【SHOI2008】Dept循环的债务
    【BZOJ】【1020】【SHOI2008】安全的航线flight
    【BZOJ】【1019】【SHOI2008】汉诺塔
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/4046468.html
Copyright © 2011-2022 走看看