android中JSON数据的读写方法

[color=blue][/color][size=medium]用习惯了XML,总觉得JSON可读性又差,也不好保存等等,到真正接触了,才发现在android上,JSON就像亲儿子一样容易管教。

还是先看数据源,数据源我采用的是一系列的村民集合,村民的属性如下。
[/size][/color]


public class Folk {
String name;
String career;
String age;
int salary;
boolean sex;


[quote]
先看写数据,数据是我假定一个村的数据,由一个arraylist填装。通过一个for循环很容易取出了arraylist中的每个对象以及其数据,每个对象,即村民都可以生成一个JSONobject,这里json和java面向对象的思想是多么吻合。prey load!
其次还有一个JSONarray对象,就是一个JSON自己的Arraylist。好比我们把自己的对象转存到一个Json对象中,从我们的Arraylist中取出来,再装进一个Json的Arraylist。好比我把一个个村名从一辆大卡车上接下来(从自己的ArrayList取),把他们穿戴整齐了(装进Json对象中),再挥挥手把他们送上火星游的太空飞船(jsonArray),临走我在飞船上挂上了village的标签,火星上的同事会知道我的村民坐的是哪艘船。所有工序完成。

看代码
[/quote]


public class MyJsonWriter {
ArrayList<Folk> folks;
File saveFile;
public MyJsonWriter(ArrayList<Folk> folks){
this.folks=folks;
}

public void setFilePath(String filepath){
saveFile=new File(filepath);
try {
saveFile.createNewFile();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

public String getJsonData(){
String jsonData = null;
// String jsonData=new JSONStringer().object().key("village").value("abc").endObject().toString();
try {
StringBuilder builder=new StringBuilder();
ArrayList<String> folksData=new ArrayList<String>();
JSONArray array=new JSONArray();
for(int i=0;i<folks.size();i++){
Folk folk=folks.get(i);
JSONObject jsonObject=new JSONObject();
jsonObject.put("name", folk.getName());
jsonObject.put("sex", folk.isSex()?"male":"female");
jsonObject.put("age", folk.getAge());
jsonObject.put("career", folk.getCareer());
jsonObject.put("salary", folk.getSalary());
folksData.add(jsonObject.toString());
array.put(jsonObject);
}
// JSONArray jsonArray=new JSONArray(folksData);
int len = array.length();
jsonData=new JSONStringer().object().key("vallage").value(array).endObject().toString();
System.out.println(jsonData);
writeData(jsonData);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return jsonData;
}

private void writeData(String jsonData) {
// TODO Auto-generated method stub
try {
BufferedReader reader=new BufferedReader(new StringReader(jsonData));
BufferedWriter writer=new BufferedWriter(new FileWriter(saveFile));
int len=0;
char[] buffer=new char[1024];
while((len=reader.read(buffer))!=-1){
writer.write(buffer, 0, len);
}
writer.flush();
writer.close();
reader.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}


[quote]
愉快的时间总是过的特别快,村民们要回家了。这时候来了一辆宇宙飞船,上面挂着我临走时贴上的标签,看来是相亲门回家了。(得到了JSONarray的对象)。打开舱门,乡亲们陆陆续续的走了下来,我为每个人做了次详细的检查,保证不会让奇怪的生物混进来,乡亲们神清气爽的重回地球表面。(循环中取出JSONArray中的JSON对象,并装填到我们自己的对象中,并存入arraylist)

上代码
[/quote]


public class MyJsonReader {
String jsonData;
// ArrayList<Folk> folks;
public MyJsonReader(String jsonData){
this.jsonData=jsonData;
}

public ArrayList<Folk> getJsonData(){
ArrayList<Folk> folks=new ArrayList<Folk>();
try {
JSONObject jsonObject=new JSONObject(jsonData);
JSONArray jsonArray=jsonObject.getJSONArray("vallage");
int len = jsonArray.length();
for(int i=0;i<jsonArray.length();i++){
JSONObject json=jsonArray.getJSONObject(i);
Folk folk=new Folk();
folk.setName(json.optString("name"));
folk.setAge(json.optString("age"));
folk.setCareer(json.optString("career"));
folk.setSalary(json.optInt("salary"));
folk.setSex(json.optString("sex").equals("male")?true:false);
folks.add(folk);
}
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return folks;
}
}

[size=medium][color=indigo]
JSON的读写在android很简单,出奇的简单,让我这个准备花一个周五下午的人后面变得十分蛋疼的来写日志。
总的来说还有些小地方需要注意
JSONArray中添加json对象的方法不是用的add而是put
[/color][/size]

jsonData=new JSONStringer().object().key("vallage").value(array).endObject().toString();

[size=medium][color=indigo]
.object和endObject成对出现 这很像XML写里面的starttag和endtag
最后我将一些的村民数据做为了一个village json对象的value,真的把这个Json对象幻想成了一艘宇宙飞船。。。
[/color][/size]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值