JSON:JavaScript 对象表示方法(JavaScript Object Notation)。
JSON是存储和交换文本信息的语法。
JSON是轻量级的文本数据交换格式
JSON独立于语言和平台
JSON具有自我描述性,更易理解
JSON与XML: 类似XML,比XML更小、更快、更易解析。
* 没有结束标签
* 更短
* 读写速度更快
* 使用数组
* 不使用保留字
JSON语法是JavaScript对象表示法语法的子集。
* 数据在名称/值对中
* 数据有逗号分隔
* 花括号保存对象
* 方括号保存数组
JSON值可以是:
* 数字(整数或浮点数)
* 字符串(在双引号中)
* 逻辑值(true或false)
* 数组(在方括号中)
* 对象(在方括号中)
* null
JSON对象:
JSON对象在花括号中书写,对象可以包含多个名称/值对
{ "firstName" : "John" , "lastName" : "Doe" }
JSON数组:
JSON数组在方括号中书写,数组可包含多个对象:
{
"employees" : [
{ "firstName" : "John" , "lastName" : "Doe" }
{ "firstName" : "Anna" , "lastName" : "Smith" }
{ "firstName" : "Peter" , "lastName" : "Jones" }
]
}
从assets包中解析test.json文件:
test.json:
{ "languages": [ { "Id": "1", "Name":"温衡", "Age":21, "Liked": false }, { "Id": "2", "Name":"思莞", "Age":23, "Liked": false }, { "Id": "3", "Name":"言希", "Age":23, "Liked": true } ], "cat":"it" }
解析并打印到后台的代码:
try { InputStreamReader isr = new InputStreamReader(getAssets().open("test.json"), "utf-8"); BufferedReader br = new BufferedReader(isr); String line; StringBuilder builder = new StringBuilder(); while ((line = br.readLine()) != null){ builder.append(line); } //文件读取完后关闭BufferReader和InputStreamReader br.close(); isr.close(); JSONObject root = new JSONObject(builder.toString()); // 可以直接传入一个带有JSON数据的字符串 //读取键值对 Log.i("Cat", "cat = " + root.getString("cat")); //读取数组 JSONArray array = root.getJSONArray("languages"); //将数组循环输出 for (int i = 0; i<array.length(); i++){ //数组中每个元素都是一个JSON对象 JSONObject lan = array.getJSONObject(i); Log.i("id", "id = " + lan.getString("Id") + "************************"); Log.i("name", "name = " + lan.getString("Name") + "****************************"); Log.i("age", "age = " + lan.getString("Age") + "****************************"); Log.i("liked", "liked = " + lan.getBoolean("Liked") + "****************************"); Log.i("fen", "------------------------------------------------------------------"); } } catch (Exception e) { e.printStackTrace(); }
在android中创建JSON数据:
//创建新的JSON数据 try { //1.创建JSON类: JSONObject root = new JSONObject(); //2.创建"cat":"it" root.put("cat", "it"); //3.创建数组,先创建数组中的类 //{"Id": "1","Name":"温衡","Age":21,"Liked": false}, JSONObject lan1 = new JSONObject(); lan1.put("Id", "1"); lan1.put("Name", "wenheng"); lan1.put("Age", 21); lan1.put("Liked", false); //{"Id": "2","Name":"思莞","Age":23,"Liked": false}, JSONObject lan2 = new JSONObject(); lan1.put("Id", "2"); lan1.put("Name", "siwan"); lan1.put("Age", 23); lan1.put("Liked", true); //创建一个数组,将创建的类包含进去 JSONArray array = new JSONArray(); array.put(lan1); array.put(lan2); //将数组放入根JSON类中 root.put("Language", array); Log.i("JSON", root + "------"); } catch (JSONException e) { e.printStackTrace(); }