Android JSON解析及简单例子(3)

其它的api基本就是用来查看json文本中的文本的

代码 

try { 
    JSONTokener jsonParser = new JSONTokener(JSON); 
    // 继续向下读8个json文本中的字符。此时刚开始,即在{处 
    jsonParser.next(8); //{    "phone。tab算一个字符 
     
    // 继续向下读1个json文本中的字符 
    jsonParser.next(); //" 
     
    // 继续向下读取一个json文本中的字符。该字符不是空白、同时也不是注视中的字符 
    jsonParser.nextClean(); //: 
     
    // 返回当前的读取位置到第一次遇到'a'之间的字符串(不包括a)。 
    jsonParser.nextString('a'); //  ["12345678", "87654321"],    "n(前面有两个空格) 
     
    // 返回当前读取位置到第一次遇到字符串中(如"0089")任意字符之间的字符串,同时该字符是trimmed的。(此处就是第一次遇到了89) 
    jsonParser.nextTo("0089"); //me" : "yuanzhifei 
     
    // 读取位置撤销一个 
    jsonParser.back(); 
    jsonParser.next(); //i 
     
    // 读取位置前进到指定字符串处(包括字符串) 
    jsonParser.skipPast("address"); 
    jsonParser.next(8); //" : { "c 
     
    // 读取位置前进到执行字符处(不包括字符) 
    jsonParser.skipTo('m'); 
    jsonParser.next(8); //married" 
} catch (JSONException ex) { 
    // 异常处理代码 

以下是一个标准的JSON请求实现过程:

HttpPost request = new HttpPost(url); 
// 先封装一个 JSON 对象 
JSONObject param = new JSONObject(); 
param.put("name", "rarnu"); 
param.put("password", "123456"); 
// 绑定到请求 Entry 
StringEntity se = new StringEntity(param.toString()); 
request.setEntity(se); 
// 发送请求 
HttpResponse httpResponse = new DefaultHttpClient().execute(request); 
// 得到应答的字符串,这也是一个 JSON 格式保存的数据 
String retSrc = EntityUtils.toString(httpResponse.getEntity()); 
// 生成 JSON 对象 
JSONObject result = new JSONObject( retSrc); 
String token = result.get("token");

下面这个是自己修改别人的小例子,主要是加一些注释和讲解,这个例子主要是使用Android进行json解析。

单数据{'singer':{'id':01,'name':'tom','gender':'男'}}
多个数据{"singers":[
        {'id':02,'name':'tom','gender':'男'},
        {'id':03,'name':'jerry,'gender':'男'},
{'id':04,'name':'jim,'gender':'男'},
{'id':05,'name':'lily,'gender':'女'}]}   

下面的类主要是解析单个数据parseJson()和多个数据的方法parseJsonMulti():

public class JsonActivity extends Activity {
 /** Called when the activity is first created. */
 private TextView tvJson;
 private Button btnJson;
 private Button btnJsonMulti;
 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);
  tvJson = (TextView) this.findViewById(R.id.tvJson);
  btnJson = (Button) this.findViewById(R.id.btnJson);
  btnJsonMulti = (Button) this.findViewById(R.id.btnJsonMulti);
  btnJson.setOnClickListener(new View.OnClickListener() {
   @Override
   public void onClick(View v) {
    // url
    // String strUrl = "http://10.158.166.110:8080/AndroidServer/JsonServlet";
    String strUrl = ServerPageUtil.getStrUrl(UrlsOfServer.JSON_SINGER);
    //获得返回的Json字符串
    String strResult = connServerForResult(strUrl);
    //解析Json字符串
    parseJson(strResult);
   }
  });
  btnJsonMulti.setOnClickListener(new View.OnClickListener() {
   @Override
   public void onClick(View v) {
    String strUrl = ServerPageUtil.getStrUrl(UrlsOfServer.JSON_SINGERS);
    String strResult = connServerForResult(strUrl);
    //获得多个Singer
    parseJsonMulti(strResult);
   }
  });
 }
 private String connServerForResult(String strUrl) {
  // HttpGet对象
  HttpGet httpRequest = new HttpGet(strUrl);
  String strResult = "";
  try {
   // HttpClient对象
   HttpClient httpClient = new DefaultHttpClient();
   // 获得HttpResponse对象
   HttpResponse httpResponse = httpClient.execute(httpRequest);
   if (httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
    // 取得返回的数据
    strResult = EntityUtils.toString(httpResponse.getEntity());
   }
  } catch (ClientProtocolException e) {
   tvJson.setText("protocol error");
   e.printStackTrace();
  } catch (IOException e) {
   tvJson.setText("IO error");
   e.printStackTrace();
  }
  return strResult;
 }
 // 普通Json数据解析
 private void parseJson(String strResult) {
  try {
   JSONObject jsonObj = new JSONObject(strResult).getJSONObject("singer");
   int id = jsonObj.getInt("id");
   String name = jsonObj.getString("name");
   String gender = jsonObj.getString("gender");
   tvJson.setText("ID号"+id + ", 姓名:" + name + ",性别:" + gender);
  } catch (JSONException e) {
   System.out.println("Json parse error");
   e.printStackTrace();
  }
 }
    //解析多个数据的Json
 private void parseJsonMulti(String strResult) {
  try {
   JSONArray jsonObjs = new JSONObject(strResult).getJSONArray("singers");
   String s = "";
   for(int i = 0; i < jsonObjs.length() ; i++){
    JSONObject jsonObj = ((JSONObject)jsonObjs.opt(i))
    .getJSONObject("singer");
    int id = jsonObj.getInt("id");
    String name = jsonObj.getString("name");
    String gender = jsonObj.getString("gender");
    s +=  "ID号"+id + ", 姓名:" + name + ",性别:" + gender+ "\n" ;
   }
   tvJson.setText(s);
  } catch (JSONException e) {
   System.out.println("Jsons parse error !");
   e.printStackTrace();
  }
 }
}

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/68ad370ed86aaada0ab6f6fd1bf703ff.html