Android编程之json解析实例详解

2019-12-10 19:43:01于丽

多个数据

 

{"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://www.easck.com/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 = jsonObjs.getJSONObject(i);
        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();
    }
  }
}