Android 操作JSON数据
JSON的定义: 一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性。业内主流技术为其提供了完整的解决方案(有点类似正则表达式,获得了当今大部分语言的支持),从而可以在不同平台间进行数据交换。JSON采用兼容性很高的文本格式,同时也具备类似V语言体系的行为。
面试题: JSON和XML的区别?
1:可读性方面:JSON和xml的数据可读性基本相同。JSON和XML的可读性可谓不相上下,一边是建议的语法,一边是规范的标签形式,很难分出胜负。
2:在可扩展性方面,XML有很好的扩展性,JSON当然没有,没有什么事XML能扩展,JSON不能的。
3:在编码难度方面,XML有丰富的编码工具,比如Dom4j,JDom等,JSON也有json.org提供的工具,但是JSON的编码明显比XML容易多,即使不借助工具也能写出JSON的代码,而XML就不太容易了。
4:在解码难度方面,XML的解析得考虑子节点父节点,JSON的解析难度几乎为0。
5:在流行方面,XML被业界方法的使用,而JSON刚刚开始,但是在Ajax这个特定的领域,未来的发展一定是XML让位于JSON。到时Ajax应该变成Ajaj(Asynchronous JavaScript and JSON)了。
6:JSON和XML同样有丰富的解析手段。
7:JSON相对于XML来讲,数据的体积小。
8:JSON与JavaScript的交互更方便。
9:JSON对数据的描述性比XML较差。
10:JSON的解析速度大于XML。
我自己写了一个JSON数据,创建一个.json格式的文本。
{
“students”:[
{“id”:1,”name”:”小明”,”sex”:”男”,”age”:18,”height”:175},
{“id”:2,”name”:”小红”,”sex”:”女”,”age”:19,”height”:165},
{“id”:3,”name”:”小强”,”sex”:”男”,”age”:20,”height”:185}
],
“cat”:”it”
}
读取json数据:
代码如:
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
try {
InputStreamReader reader = new InputStreamReader(getAssets().open("student.json"), "utf-8");
BufferedReader reader2 = new BufferedReader(reader);
String line;
StringBuilder builder = new StringBuilder();
while ((line = reader2.readLine())!= null) {
builder.append(line);
}
reader2.close();
reader.close();
JSONObject object = new JSONObject(builder.toString());
System.out.println("cat=" + object.getString("cat"));
JSONArray array = object.getJSONArray("students");
for (int i = 0; i < array.length(); i++) {
JSONObject obj = array.getJSONObject(i);
System.out.println("------------------");
System.out.println("id="+obj.getInt("id"));
System.out.println("name="+obj.getString("name"));
System.out.println("sex="+obj.getString("sex"));
System.out.println("age="+obj.getInt("age"));
System.out.println("height="+obj.getInt("height"));
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (JSONException e) {
e.printStackTrace();
}
}
}
从Log打印出来就能看见json数据。。。。。。。。
创建json数据:
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
try {
JSONObject object = new JSONObject();
object.put("cat", "it");
JSONObject obj1 = new JSONObject();
obj1.put("id", 1);
obj1.put("name", "小明");
obj1.put("sex", "男");
obj1.put("age", 18);
obj1.put("height", 175);
JSONObject obj2 = new JSONObject();
obj2.put("id", 2);
obj2.put("name", "小红");
obj2.put("sex", "女");
obj2.put("age", 19);
obj2.put("height", 165);
JSONObject obj3 = new JSONObject();
obj3.put("id", 3);
obj3.put("name", "小强");
obj3.put("sex", "男");
obj3.put("age", 20);
obj3.put("height", 185);
JSONArray array = new JSONArray();
array.put(obj1);
array.put(obj2);
array.put(obj3);
object.put("students", array);
System.out.println(object.toString());
} catch (JSONException e) {
e.printStackTrace();
}
}
}
打印出来会得到一分跟assets 同样的json数据格式.
同样这里又出现一个 面试题:getString()与optString()的区别?
getString()当返回值不是jsonObject对象时,会抛出异常;
optString()当返回值不是jsonObject对象时,返回值为null,不会抛出异常。

浙公网安备 33010602011771号