JSONObject & JSONArray的调用

对于JSON嵌套,只要记住符号“:”前是键,符号后是值。大括号成对找,一层层剥开,就清楚了。

从外到里看,例子中就是一个数组,数组里面是两个json格式的字符串。这样分析思路就清晰多了。 工作中需要取出name4的值,你们会怎么取呢?。最初我都想过字符串截取,那时还不了解JSONArray,现在知道了,取出来也就相当容易了。

取出name4值过程步骤:1,将以上字符串转换为JSONArray对象;2,取出对象的第一项,JSONObject对象;3,取出name1的值JSONObject对象;4,取出name2的值JSONObject对象;5,取出name4的值value2。示例中json数组格式的字符串可以通过方法直接转换为JSONArray的格式:JSONArray.fromObject(String)

JSONArray getJsonArray=JSONArray.fromObject(arrayStr);//将结果转换成JSONArray对象的形式
JSONObject getJsonObj = getJsonArray.getJSONObject(0);//获取json数组中的第一项
String result=getJsonObj.getJSONObject("name1").getJSONObject("name2").getJSONObject("name4");

我们说说这两个对象。
1、JSONObject
json对象,就是一个键对应一个值,使用的是大括号{ },如:{key:value}
2、JSONArray
json数组,使用中括号[ ],只不过数组里面的项也是json键值对格式的
Json对象中添加的是键值对,JSONArray中添加的是Json对象

JSONObject Json = new JSONObject();
JSONArray JsonArray = new JSONArray();

Json.put("key", "value");//JSONObject对象中添加键值对
JsonArray.add(Json);//将JSONObject对象添加到Json数组中

3、JSONObject与Map
Map map和json都是键值对,不同的是map中键值对中间用等号分开,json中键值对中间用冒号分开。其实json就是一种特殊形式的map。

Map<String,String> strmap=new JSONObject();

这里的需求是:request对象获取的map,想要返回json格式也不用白费力了。。。。

以上转载自:http://blog.csdn.net/lishuangzhe7047/article/details/28880009

下面是Jason自己的使用范例:
调用Face++ 的Landmark 83p的Android例子:

 try {
	 PostParameters postParameters = new PostParameters();
	 postParameters.setImg(detecter.getImageByteArray());
	 postParameters.setTag("Jason");
	 postParameters.setMode("oneface");
	 postParameters.setAttribute("landmark,gender,age,race,smiling,glass,pose");
	 result = request.detectionDetect(postParameters);
	 //将得到的值传给RecognitionProcess处理
	 Toast.makeText(RecognitionActivity.this, "人脸检测完成!", Toast.LENGTH_LONG).show();
	 Log.i(TAG, "result的值为" + result);
	 //
	 //postParameters.setFaceId("0165e82f3c34d79827a76d16b972f803");
	 //for (int i = 0; i < result.getJSONArray("face").length(); ++i)
	      postParameters.setFaceId(result.getJSONArray("face").getJSONObject(0).getString("face_id"));
	 result2 = request.detectionLandmark(postParameters);
	 Toast.makeText(RecognitionActivity.this, "坐标检测完成!", Toast.LENGTH_LONG).show();
	 Log.i(TAG, "result2的值为" + result2);
	 //for (int i = 0; i < result2.getJSONArray("result").length(); ++i)
	 Toast.makeText(RecognitionActivity.this, "鼻子左侧点一X坐标"+result2.getJSONArray("result").getJSONObject(0).getJSONObject("landmark").getJSONObject("nose_contour_left1").getString("x"), Toast.LENGTH_LONG).show();

	  //本地SDK检测
	  //request.offlineDetect(detecter.getImageByteArray(),detecter.getResultJsonString(), new PostParameters());
	  } catch (FaceppParseException e) {
	  // TODO 自动生成的 catch 块
	  e.printStackTrace();
	  } catch (JSONException e) {
	  // TODO Auto-generated catch block
	  e.printStackTrace();
	  Log.i(TAG, "result2检测失败");
}