本例json解析使用的框架是fastjson。
在app下的build.gradle的dependencies中添加
compile 'com.alibaba:fastjson:1.2.21'
要解析的json文件:
{
"image_id": "74DulsVcu706PdIPFUGxRcUq3pyPwJEqO6PKzdin",
"faces": [
{
"id": "74DulsVcu706PdIPFUGxRcUq3pyPwJEqO6PKzdin",
"rect": {
"x": 200,
"y": 135,
"w": 229,
"h": 229
},
"attributes": {
"age": 35,
"expression": [
{
"kind": "Happy",
"probability": 0.9751
}
],
"gender": [
{
"kind": "female",
"probability": 0.9059
}
],
"race": [
{
"kind": "black/brown",
"probability": 0.5208
},
{
"kind": "white",
"probability": 0.4787
},
{
"kind": "yellow",
"probability": 0.0004
}
],
"pose": {
"yaw": 45.1,
"roll": 10.4,
"pitch": 12
},
"quality": 59
}
},
{}, ...
],
"final_time": 590
}
JSONObject jsonRes = JSON.parseObject(json);//把java对象转换为json对象
JSONArray facesArr = jsonRes.getJSONArray("faces");
if(facesArr != null && facesArr.size() > 0) {
for (int i = 0; i < facesArr.size(); i++) {
JSONObject jsonObjArr = facesArr.getJSONObject(i);
String faceId = jsonObjArr.getString("id");
Log.e("faceId:", faceId);
JSONObject attributesJsonObj = jsonObjArr.getJSONObject("attributes");
String ageStr = attributesJsonObj.getString("age");
tvAge.setText("年龄:" + ageStr);
JSONArray expressionJsonArr = attributesJsonObj.getJSONArray("expression");
JSONObject expressionJsonObj = expressionJsonArr.getJSONObject(0);
String expressionStr = expressionJsonObj.getString("kind");
tvExpression.setText("表情:" + expressionStr);
JSONArray genderJsonArr = attributesJsonObj.getJSONArray("gender");
JSONObject genderJsonObj = genderJsonArr.getJSONObject(0);
String genderStr = genderJsonObj.getString("kind");
if ("male".equalsIgnoreCase(genderStr)) {
tvGender.setText("性别:男");
} else {
tvGender.setText("性别:女");
}
JSONArray raceJsonArr = attributesJsonObj.getJSONArray("race");
// for (int m = 0;m < raceJsonArr.size();m++){
JSONObject raceJsonObj = raceJsonArr.getJSONObject(0);
String raceStr = raceJsonObj.getString("kind");
if ("yellow".equalsIgnoreCase(raceStr)) {
tvRace.setText("人种:黄种人");
} else if ("white".equalsIgnoreCase(raceStr)) {
tvRace.setText("人种:白种人");
} else {
tvRace.setText("人种:黑/棕种人");
}
// }
String qualityStr = attributesJsonObj.getString("quality");
tvQuality.setText("质量:" + qualityStr);
}
}else if(facesArr == null || facesArr.size() == 0) {
Toast.makeText(MainActivity.this, "图片中没有人脸,请重新拍摄", Toast.LENGTH_LONG).show();
}
数组判断为空的方法:
facesArr != null && facesArr.size() > 0 //数组不为空
facesArr == null || facesArr.size() == 0 //数组为空