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,不会抛出异常。

posted @ 2016-12-26 16:16  天涯海角路  阅读(107)  评论(0)    收藏  举报