JSON 指的是 JavaScript 对象表示法(JavaScript Object Notation)
JSON 是轻量级的文本数据交换格式
JSON 独立于语言
JSON 具有自我描述性,更易理解
没有结束标签
更短
读写的速度更快
能够使用内建的 JavaScript eval() 方法进行解析
使用数组
不使用保留字
数据在名称/值对中
数据由逗号分隔
花括号保存对象
方括号保存数组
数字(整数或浮点数)
字符串(在双引号中)
逻辑值(true 或 false)
数组(在方括号中)
对象(在花括号中)
null
我们可以new一个JSONObject对象,然后通过它的put方法添加数据,添加的数据可以是一个JSONObject,也可以是一个JsonArray,JsonArray也可以通过new JSONArray()创建一个数组对象,然后通过put方法添加内容。
示例代码:
public class MainActivity extends Activity {
private List list = new ArrayList();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initList();
try {
JSONObject root = new JSONObject();
root.put("school", "铁岭中学");
root.put("className", "三年二班");
JSONArray array = new JSONArray();
for (Student student : list) {
JSONObject st = new JSONObject();
st.put("id", student.getId());
st.put("name", student.getName());
st.put("age", student.getAge());
st.put("sex", student.getSex());
array.put(st);
}
root.put("students", array);
Log.d("TTTT", root.toString());
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private void initList() {
list.add(new Student(1, "张一", 10, "男"));
list.add(new Student(2, "张二", 20, "女"));
list.add(new Student(3, "张三", 30, "男"));
list.add(new Student(4, "张四", 40, "女"));
list.add(new Student(5, "张五", 50, "男"));
list.add(new Student(6, "张六", 60, "女"));
}
}
生成的JSON
{
"students": [
{
"id": 1,
"sex": "男",
"age": 10,
"name": "张一"
},
{
"id": 2,
"sex": "女",
"age": 20,
"name": "张二"
},
{
"id": 3,
"sex": "男",
"age": 30,
"name": "张三"
},
{
"id": 4,
"sex": "女",
"age": 40,
"name": "张四"
},
{
"id": 5,
"sex": "男",
"age": 50,
"name": "张五"
},
{
"id": 6,
"sex": "女",
"age": 60,
"name": "张六"
}
],
"className": "三年二班",
"school": "铁岭中学"
}
创建一个JSONObject对象,将json字符串传入
通过JSONObject对象的getJSONArray(name)方法获取json字符串中名称为name的数组
通过JSONObject对象的getString(name)方法获取json字符串中名称为name的字符串
通过JSONObject对象的getJSONObject(name)方法获取json字符串中名称为name的对象
示例代码:
public class MainActivity extends Activity {
private List list = new ArrayList();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
try {
FileInputStream fis = openFileInput("school.json");
BufferedReader br = new BufferedReader(new InputStreamReader(fis, "gbk"));
String line = br.readLine();
StringBuilder sb = new StringBuilder();
while (line != null) {
sb.append(line);
line = br.readLine();
}
fis.close();
JSONObject root = new JSONObject(sb.toString());
String school = root.getString("school");
String className = root.getString("className");
Log.d("TTTT", "学校:" + school + ",班级:" + className);
JSONArray array = root.getJSONArray("students");
for (int i = 0; i < array.length(); i++) {
JSONObject student = (JSONObject) array.get(i);
Log.d("TTTT", "id:" + student.getString("id") + ",name:" + student.getString("name") + ",age:"
+ student.getString("age") + ",sex:" + student.getString("sex"));
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
运行结果
03-28 11:44:10.583: D/TTTT(1640): 学校:铁岭二中,班级:三年二班
03-28 11:44:10.583: D/TTTT(1640): id:1,name:张一,age:10,sex:男
03-28 11:44:10.583: D/TTTT(1640): id:2,name:张二,age:20,sex:女
03-28 11:44:10.583: D/TTTT(1640): id:3,name:张三,age:30,sex:男
03-28 11:44:10.583: D/TTTT(1640): id:4,name:张四,age:40,sex:女
03-28 11:44:10.583: D/TTTT(1640): id:5,name:张五,age:50,sex:男
03-28 11:44:10.583: D/TTTT(1640): id:6,name:张六,age:60,sex:女