JSONObject 保存和传送 数组数据 ,如int[] ,double[] ,String[]...
16lz
2021-01-24
上图为转换后的显示效果。下面介绍如何转换
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 不懂的可以下来看看 都是很基础的
更多相关文章
- Android(安卓)开发笔记——通过 Intent 传递类对象
- 浅谈Android(安卓)数据库的使用
- 关于自定义无限轮播图_Android
- 关于android AbsSeekBar
- Android访问远程网页取回json数据
- android客户端从服务器端获取json数据并解析
- Android使用ksoap2包调用Webservice
- 【Android(安卓)应用开发】Activity 状态保存 OnSaveInstanceSta
- Android(安卓)当数据库变动时更新UI数据 注册观察者监听