JSON数据格式(一)
JSON
JavaScript 对象表示法(JavaScript Object Notation)。已经成为现在互联网中数据交换格式。
Android API
Android API中有JSON解析,可以将文件、输入流中的数据转化为JSON对象,然后从对象中获取JSON保存的数据内容。
Android 中org.json包下,提供JSONObject、JSONArray、JSONStringer、JSONTokener、JSONException。
Json优势
易读易编写,也易于机器解析和生成。
两种数据结构
- “名称/值”对的集合,可以被理解为对象(object),记录(Record),结构(struct),字典(Dictionary),哈希表(HashTable),有键列表(Keyed list),或者挂链数组(Assocation arra)
- 值的有序列表(An ordered list of values)。大部分语言里理解为数组。
JSON Object
以key/value对形式{“名称”:值}存在的无序的jsonObject对象,键值对之间用“,”隔开。其中key值必须是string类型,value可以是JSONObjects、JSONArrays、Strings、Booleans、Integers、Longs、Doubles或者NULL等的任意组合。如:{“name”:”jack”}
JSON Array
有序的value的集合,数组是值(value)的有序集合,使用“[ ]”括起来,值之间用“,”逗号分隔,value可以是JSONObjects、JSONArrays、Strings、Booleans、Integers、Longs、Doubles或者NULL等的任意组合,如:{“info”:[{“name”:”jack”},{“name”:”rose”}]},{value1,value2,value3}。这些结构可以嵌套。
JSONObject与JSONArray常用的方法
JSONObject
- JSONObject.put() //将值放入其中
- JSONObject.getXXX() //若不存在此值,则返回异常
- JSONObject.optXXX() //若不存在此值,则返回空字符串
- 具体可以参照官方链接 http://www.android-doc.com/reference/org/json/JSONObject.html
JSONArray
- JSONArray.put()
- JSONArray.getXXX()
- JSONArray.optXXX()
JSONObject对象的创建
//创建JSONObject
private String createJSONObject() {
JSONObject object = new JSONObject();
try {
object.put("name", "jack_obj");
object.put("age", 11);
object.put("undergraduate", true);
// object.put("salary", null); //这种输入null值,输出在屏幕中不显示salary这个key键。
object.put("salary", JSONObject.NULL); //这个则会显示salary这个key,还有null值
} catch (JSONException e) {
e.printStackTrace();
}
return object.toString();
}
JSONArray对象的创建
//创建JSONArray
private String createJSONArray() {
JSONArray array = new JSONArray();
array.put("jack_arr");
array.put(22);
//生成JSONObject对象放入JSONArray中
JSONObject inner_obj1 = new JSONObject();
try {
inner_obj1.put("name", "Alice");
inner_obj1.put("age", 34);
} catch (JSONException e) {
e.printStackTrace();
}
JSONObject inner_obj2 = new JSONObject();
try {
inner_obj2.put("name", "white");
inner_obj2.put("age", 45);
} catch (JSONException e) {
e.printStackTrace();
}
array.put(inner_obj2);
array.put(inner_obj1);
return array.toString();
}
JSONObject解析
//解析JSONObject数据
private String parseJSONObject(String json) {
String result = " ";
try {
JSONObject jsonObject = new JSONObject(json);
//optString方法会在对应的key中的值不存在的时候返回一个空字符串或者返回你指定的默认值,
// 但是getString方法会出现空指针异常的错误。
String name = jsonObject.optString("name");
// String name = jsonObject.getString("name");
String age = jsonObject.optString("age");
if (!TextUtils.isEmpty(name)) {
result += "name:" + name;
}
if (!TextUtils.isEmpty(age)) {
result += "age:" + age;
}
return result;
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
JSONArray解析
//parseJSONObject方法是会在接下来parseJSONArray()中调用
private String parseJSONObject(JSONObject jsonObject) {
String result = " ";
/**
* optString方法会在对应的key中的值不存在的时候返回一个空字符串或者返回你指定的默认值,
* 但是getString方法会出现空指针异常的错误。
* */
String name = jsonObject.optString("name");
// String name = jsonObject.getString("name");
String age = jsonObject.optString("age");
if (!TextUtils.isEmpty(name)) {
result += "name:" + name;
}
if (!TextUtils.isEmpty(age)) {
result += "age:" + age;
}
return result;
}
//解析JSONArray数据
private String parseJSONArray(String array) {
String result = " ";
try {
JSONArray jsonArray = new JSONArray(array);
result = jsonArray.getString(0);
result +=jsonArray.getString(1);
result +=jsonArray.getString(2);
for (int i = 2; i < jsonArray.length(); i++) {
JSONObject jsonObject = jsonArray.getJSONObject(i);
result += parseJSONObject(jsonObject) + "\n\n";
// result += jsonObject.optString("jack");
}
} catch (JSONException e) {
e.printStackTrace();
}
return result.toString();
}