一、JSON 简介
JSON 全称:JavaScript Object Notation JavaScript 为JS的一个子集
JSON是一种轻量级的存储和交换文本信息的格式JSON可独立于语言,不同平台都有对他的解析方法
JSON易于理解,比较直观的显示key - value
(1)整数,浮点数
(2)boolean true or false
(3)null
(4)String "字符串"
(5)对象
(6)数组
JSON常见语法的规则
(1)大括号保存对象:
eg: {"name":"张三","age":25, "isStudent":true, "girlFriend":null}
中括号保存数组
eg:
"Student":[{"name":"张三","age":25, "isStudent":true, "girlFriend":null}
{"name":"李四","age":24, "isStudent":false, "girlFriend":null}
]
数据在键值对中
数据由逗号分开
ps:嵌套使用
(1)对象中嵌套对象
{
"name":"张三",
"age":23,
"love": {
"love1":"study",
"love2":"play",
"love3":"sleep"
}
}
(2)对象中嵌套数组
{
"name":"张三",
"age":23,
"love":[
{"love1":"study"},
{"love2":"play"},
{"love3":"sleep"}
]
}
(3)数组中嵌套对象
{
"love":[
{"love1":"study"},
{"love2":"play"},
{"love3":"sleep"}
]
}
(4)数组中嵌套数组
{
"student":[
"name1":[
{"love1":"study"},
{"love2":"play"},
{"love3":"sleep"}
]
"name2":[
{"love1":"study"},
{"love2":"play"},
{"love3":"sleep"}
]
]
}
二、android 提供的API解析(感觉解析的时候需要知道key,不然没法解? 另外还有第三方GSON等解析方式)
JSONObject:获取JSON对象
JSONArray:获取JSON数组
下面是自己写的demo,可帮助理解
public class ParseJSONActivity extends AppCompatActivity {
private TextView tv = null;
private Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what){
case 1:
String b = (String) msg.obj;
// StringBuffer sbuff = parseJson(b);
StringBuffer sbuff = parseJsonSecond(b);
Log.d("xu", "sbuff = " + sbuff);
tv.setText(sbuff);
break;
}
}
};
// private StringBuffer parseJson(String b) {
// StringBuffer showJson = new StringBuffer();
// try {
// JSONObject persionObj = new JSONObject(b);
// JSONArray persionItem = persionObj.getJSONArray("persion");
// for (int i = 0; i < persionItem.length(); i++) {
// JSONObject jobPerionItem = persionItem.getJSONObject(i);
// Persion persion = new Persion();
// persion.setName(jobPerionItem.getString("name"));
// persion.setAge(jobPerionItem.getInt("age"));
// persion.setWork(jobPerionItem.getBoolean("isWork"));
// persion.setFavorite(jobPerionItem.getString("favorite"));
// Log.d("xuze", "persion = " + persion.toString());
// showJson.append(persion.toString() + "\n");
// }
// } catch (JSONException e) {
// e.printStackTrace();
// }
// return showJson;
// }
private StringBuffer parseJsonSecond(String b){
StringBuffer showJson = new StringBuffer();
try {
JSONObject jo = new JSONObject(b); //获得JSON对象
JSONArray ja = jo.getJSONArray("ch"); //取key为ch的JSON数组
for (int i = 0; i < ja.length(); i++) {
JSONObject jo1 = ja.getJSONObject(i); //JSON数组中的每组数组的对象
String a = jo1.getString("names");
showJson.append(a + " datas = ");
JSONArray jsa = jo1.getJSONArray("data");
int[] datas = new int[jsa.length()];
for (int j = 0; j < jsa.length(); j++) {
datas[i] = (int) jsa.get(i);
showJson.append(datas[i] + " ");
}
showJson.append(" times = ");
JSONArray jsa1 = jo1.getJSONArray("times");
int[] times = new int[jsa1.length()];
for (int m = 0; m < jsa1.length(); m++) {
times[i] = (int) jsa1.get(i);
showJson.append(times[i] + " ");
}
showJson.append("\n");
Log.d("xu", "showJson2 = " + showJson);
}
} catch (JSONException e) { //文本不符合JSON标准会出错
Log.d("xu", "JSONException");
e.printStackTrace();
}
return showJson;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_parse_json);
initView();
}
private void initView() {
tv = (TextView) findViewById(R.id.parse_json);
tv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
new Thread(new Runnable() {
@Override
public void run() {
// InputStream is = getResources().openRawResource(R.raw.jsontext);
InputStream is = getResources().openRawResource(R.raw.seconjsontext);
String a = "";
if (is != null) {
ByteArrayOutputStream output = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len = -1;
try {
while ((len = is.read(buffer)) != -1) {
output.write(buffer, 0, len);
}
is.close();
output.close();
byte[] bytes = output.toByteArray();
a = new String(bytes, "utf-8");
} catch (IOException e) {
e.printStackTrace();
}
Log.d("xu", "bytes = " + a);
Message message = new Message();
message.obj = a;
message.what = 1;
handler.sendMessage(message);
}
}
}).start();
}
});
}
}
{
"persion":[
{ "name":"zhangsan", "age":"18", "isWork":true, "favorite":"study" },
{ "name":"里斯", "age":"20", "isWork":false, "favorite":"play" },
{ "name":"啊无", "age":"19", "isWork":true, "favorite":"sleep" }
]
}
{
"ch":[
{"names":"zhangsan", "data":[2,2,1,1,1,1], "times":[10,11,13,13,23]},
{"names":"lisi", "data":[2,2,1,1,1,1], "times":[10,11,13,13,23]}
]
}