JSON:JavaScript对象表示 法(JavaScript Object Notation)
JSON是存储和交换文本信息的语法,是轻量级的文本数据交换格式,独立于语言和平台。
JSON和XML类似,但比XML更小、读写速度更快、更容易解析
JSON建构于两种结构:
1. “名称/值”对的集合(A collection of name/value pairs)。不同的语言中,它被理解为对象(object),记录(record),结构(struct),字典(dictionary),哈希表(hash table),有键列表(keyed list),或者关联数组 (associative array)。
2. 值的有序列表(An ordered list of values)。在大部分语言中,它被理解为数组(array)。
首先我们手动生成一个JSON格式的文件
test.json:
{
"Languages": [
{
"id": 1,
"ide": "Eclipse",
"name": "Java"
},
{
"id": 2,
"ide": "XCode",
"name": "Swift"
},
{
"id": 3,
"ide": "Visual Studio",
"name": "C#"
}
],
"cat": "it"
}
读取JSON数据
try {
InputStream is = getAssets().open("test.json"); //获取json文件
InputStreamReader isr = new InputStreamReader(is, "UTF-8"); //读取到InputStreamReader缓冲区
BufferedReader br = new BufferedReader(isr); //读取到BufferedReader缓冲区
String line;
StringBuilder sb = new StringBuilder();
while ((line = br.readLine()) != null) {
sb.append(line); //把json数据添加到StringBuilder容器中
}
br.close();
isr.close();
is.close(); //使用后记得关闭
JSONObject root = new JSONObject(sb.toString()); //通过StringBuilder创建json根对象
tv.append(root.getString("cat") + "\n");
JSONArray array = root.getJSONArray("Languages"); //通过根json对象获取Languages数组中的内容
for (int i = 0; i < array.length(); i++) {
JSONObject child = array.getJSONObject(i); //通过json数组对象获取数组中的json子对象
tv.append( child.getInt("id") + " " //显示内容
+ child.getString("ide") + " "
+ child.getString("name") + " "
+ "\n");
}
} catch (IOException e) {
e.printStackTrace();
} catch (JSONException e) {
e.printStackTrace();
}
我们不仅可以解析JSON数据,我们也可以生成JSON数据:
生成JSON数据
JSONObject root = new JSONObject(); //首先创建一个json根对象
try {
root.put("cat","it");
JSONObject child = new JSONObject(); //数组json子对象
child.put("id",1);
child.put("ide","Android studio");
child.put("name","Android");
JSONArray array = new JSONArray(); //json数组对象
array.put(child); //把json子对象放到数组中
root.put("Languages",array); //把数组放到json根对象中
System.out.println(root.toString());
} catch (JSONException e) {
e.printStackTrace();
}
把生成的JSON数据以字符串形式输出: