JSONObject 保存和传送 数组数据 ,如int[] ,double[] ,String[]...

来源:互联网 发布:禅道数据库配置文件 编辑:程序博客网 时间:2024/06/05 03:20

上图为转换后的显示效果。下面介绍如何转换

public class MainActivity extends Activity {private TextView show;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);show = (TextView) findViewById(R.id.show);jsonSendArray();}/** * 用json发送数据 如int [] ,double[] ,String [] .... * 这里是封装并发送 ,方法略显笨拙 */public void jsonSendArray(){int [] dou={1,2,3,4,5,6,7,8,9,0};JSONObject clientKey = new JSONObject(); JSONArray jsonArray = new JSONArray(); //保存数组数据的JSONArray对象for(int i = 0 ; i < dou.length ;i++){  //依次将数组元素添加进JSONArray对象中jsonArray.put(dou[i]);//          两种添加方式一样//try {//jsonArray.put(i, dou[i]);//} catch (JSONException e) {//// TODO Auto-generated catch block//e.printStackTrace();//}      }try {clientKey.put("intArray", jsonArray);//jsonArray相当于int数组        show.setText(clientKey.toString());   //输出测试      } catch (JSONException e) {e.printStackTrace();}}}
下面介绍一些JSONObject 和JSONArray的一些基础用法

     

/** * 一组数据转换成json * */public  void string2json(){   String str="{\"name\":\"Iyangc\",\"age\":21,\"sex\":'男',\"address\":{\"province\":\"四川\",\"city\":\"成都\"}}";   try {JSONObject jsonObject = new JSONObject(str);String name = jsonObject.getString("name");JSONObject address = jsonObject.getJSONObject("address");String province = address.getString("province");int age = jsonObject.getInt("age");  show.setText("name: "+name+"\nprovince: "+province+"\nage: "+age);   } catch (JSONException e) {e.printStackTrace();} }/** * 数组数据转换json * */public  void json2String(){ String str= "[{\"name\":\"张一\",\"age\":22,\"address\":" +"{\"province\":\"四川\",\"city\":\"成都\",\"details\":\"光明街16号\"}}," +"{\"name\":\"张二\",\"age\":23,\"address\":" +"{\"province\":\"四川\",\"city\":\"成都\",\"details\":\"建设路5号\"}}," +"{\"name\":\"张三\",\"age\":23,\"address\":" +"{\"province\":\"四川\",\"city\":\"成都\",\"details\":\"中山南路8号\"}}]";   try {JSONArray jsonArray = new  JSONArray(str); //将String转换成JsonArray对象      int length=jsonArray.length();      //取出数据 for (int i = 0; i < length; i++) { JSONObject jsonObject = jsonArray.getJSONObject(i); String name = jsonObject.getString("name"); JSONObject jsonObject2 = jsonObject.getJSONObject("address"); String province = jsonObject2.getString("province"); System.out.println(name+"-----------"+province);}} catch (JSONException e) {// TODO Auto-generated catch blocke.printStackTrace();} }/** * 以键值对写入json * */public static void jsonArray2String(){JSONArray jsonArray = new  JSONArray();JSONObject jsonObject1= new  JSONObject();JSONObject jsonObject2= new  JSONObject();JSONObject jsonObject3= new  JSONObject();try {jsonObject1 .put("name","Iyangc");jsonObject1 .put("age",21);JSONObject addressObject1 = new  JSONObject();addressObject1.put("province", "四川");jsonObject1.put("address",addressObject1 );jsonObject2 .put("name","ILan");jsonObject2 .put("age",22);JSONObject addressObject2 = new  JSONObject();addressObject2.put("province", "四川简阳");jsonObject2.put("address",addressObject2 );jsonObject3 .put("name","IBo");jsonObject3 .put("age",21);JSONObject addressObject3 = new  JSONObject();addressObject3.put("province", "四川石桥");jsonObject3.put("address",addressObject3 );jsonArray.put(jsonObject1);jsonArray.put(jsonObject2);jsonArray.put(jsonObject3);//打印输出转换成json格式后的String字符串String string = jsonArray.toString();System.out.println(string );} catch (JSONException e) {// TODO Auto-generated catch blocke.printStackTrace();}}
    就单独用JSON的话 解析起来会显得很麻烦 所以一般要和Gson一起使用。 Gson可以直接将Json类型的字符串转换成类对象,并且对象的属性值与Json的属性值相对应。Gson的一个免费下载地址:http://download.csdn.net/detail/a771948524/6668573

下载后 将其jar包导入工程就可以使用了。下面是Gson的一些基本用法:

 

public class GsonDemo extends Activity {Ure ure1;Ure ure2;Ure ure3;ArrayList<Ure> ures;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.gson_demo);ures=new ArrayList<Ure>();ure1=new Ure("Iyangc",21);ure2=new Ure("Iyang",22);ure3=new Ure("Iyan",23);ures.add(ure1);ures.add(ure2);ures.add(ure3);//strToJson();// listToJson();// strFromJson(); listFromJson();}/** * 通过Gson将bean转化成JSON数据 * */public void  strToJson(){         Gson g=new Gson();          //通过Gson.toJson将bean转成Json对象         String json = g.toJson(ure1);   System.out.println(json );}/** * 通过Gson.toJson将bean集合转成Json对象 * */public void  listToJson(){Gson g=new Gson();//通过Gson.toJson将bean集合转成Json对象String json = g.toJson(ures);System.out.println(json );}/** * 将JSON格式的数据解析出来~~ * */public void  strFromJson(){Ure ure=new Ure();Gson g=new Gson();String str="{\"name\":\"ILan\",\"age\":22}";//JSONObject json=new JSONObject(str);ure=g.fromJson(str, Ure.class);System.out.println(ure.name+" ======= "+ure.age);}/** * 将JSON格式的数据(集合)解析出来~~ * */public void  listFromJson(){Gson g=new Gson();String str="[{\"name\":\"ILan1\",\"age\":221},{\"name\":\"ILan2\",\"age\":222}]";//JSONObject json=new JSONObject(str);                  Type type = new  TypeToken<List<Ure>>(){  }.getType();                  //将JSON集合数据解析出来                 List<Ure> l=g.fromJson(str,type);       for (Ure ure : l) {       System.out.println(ure.name+" ======= "+ure.age);}}}class Ure{public String name;public int age;  public Ure(String name, int age) {this.name = name;this.age = age;}public Ure() {}}

在JSONObject 传送数组时 可以直接在bean类中定义一个数组 ,只要属性名对应且类型对应 用Gson可直接转换出来,就和基本类型一样。
  如果 Ure类中多一个 double[]  数组对象dou, 而且json中有对应数据   那么用Gson将json转换成use对象后 直接 use.dou就能获取这个数组数据。

Demo下载地址: http://download.csdn.net/detail/yangbo437993234/7626045   不懂的可以下来看看 都是很基础的



0 0