android实现json数据的解析和把数据转换成json格式的字符串
jopen
11年前
JSONObject和JSONArray把集合或者普通数据,转换成json格式的字符串
JSONObject和JSONArray解析json格式的字符串为集合或者一般数据import java.util.ArrayList; import java.util.List; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.TextView; import android.widget.Toast; public class MainActivity extends Activity implements OnClickListener { private Button button1, button2, button3, button4; //4个按钮 private TextView textView; //显示处理结果的textview private List<UserBean> userBeans; //保存数据的集合 private JSONObject object; //JSONObject对象,处理一个一个的对象 private JSONObject object2; private JSONArray jsonArray;//JSONObject对象,处理一个一个集合或者数组 private String jsonString; //保存带集合的json字符串 private String jsonString2;//不带集合的json字符串 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); initView(); //初始化控件 initDate(); //初始化数据 setListener(); //绑定监事件 } private void initView() { button1 = (Button) findViewById(R.id.bt1); button2 = (Button) findViewById(R.id.bt2); button3 = (Button) findViewById(R.id.bt3); button4 = (Button) findViewById(R.id.bt4); textView = (TextView) findViewById(R.id.text); } /** * 初始化2个用户对象 */ private void initDate() { userBeans = new ArrayList<UserBean>(); UserBean userBean = new UserBean(); userBean.setUserId(1); userBean.setUserName("hck"); userBeans.add(userBean); UserBean userBean2 = new UserBean(); userBean2.setUserId(2); userBean2.setUserName("蝌蚪"); userBeans.add(userBean2); } private void setListener() { button1.setOnClickListener(this); button2.setOnClickListener(this); button3.setOnClickListener(this); button4.setOnClickListener(this); } private void changeArrayDateToJson() { //把一个集合转换成json格式的字符串 jsonArray=null; object=null; jsonArray = new JSONArray(); object=new JSONObject(); for (int i = 0; i < userBeans.size(); i++) { //遍历上面初始化的集合数据,把数据加入JSONObject里面 object2 = new JSONObject();//一个user对象,使用一个JSONObject对象来装 try { object2.put("userId", userBeans.get(i).getUserId()); //从集合取出数据,放入JSONObject里面 JSONObject对象和map差不多用法,以键和值形式存储数据 object2.put("userName", userBeans.get(i).getUserName()); jsonArray.put(object2); //把JSONObject对象装入jsonArray数组里面 } catch (JSONException e) { e.printStackTrace(); } } try { object.put("userDate", jsonArray); //再把JSONArray数据加入JSONObject对象里面(数组也是对象) //object.put("time", "2013-11-14"); //这里还可以加入数据,这样json型字符串,就既有集合,又有普通数据 } catch (JSONException e) { e.printStackTrace(); } jsonString=null; jsonString = object.toString(); //把JSONObject转换成json格式的字符串 textView.setText(jsonString); Log.i("hck", "转换成json字符串: " + jsonString); } private void changeNotArrayDateToJson() { object=null; object=new JSONObject(); try { object.put("userId", "1"); //把数据加入JSONObject对象即可,"userid"相当于map里面的key,1即为value的值。 object.put("userName", "hck"); } catch (JSONException e) { e.printStackTrace(); } jsonString2=null; jsonString2 = object.toString();//把JSONObject转换成json格式的字符串 Log.i("hck", "转换成json字符串: " + jsonString2); textView.setText(jsonString2); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.bt1: changeNotArrayDateToJson(); //点击第一个按钮,把集合转换成json数据格式的string break; case R.id.bt2: changeArrayDateToJson(); //点击第2个按钮,把普通数据换成json数据格式的string break; case R.id.bt3: //解析不带集合的json字符串 if (jsonString2==null || "".equals(jsonString2)) { Toast.makeText(MainActivity.this, "请先点击上面第1个按钮转把数据换成json字符串", Toast.LENGTH_LONG).show(); return; } changeJsonToData2(); break; case R.id.bt4://解析带集合的json字符串 if (jsonString==null || "".equals(jsonString)) { Toast.makeText(MainActivity.this, "请先点击第2按钮把数据换成json字符串", Toast.LENGTH_LONG).show(); return; } changeJsonToData1(); break; default: break; } } private void changeJsonToData1() { StringBuilder stringBuilder=new StringBuilder(); //用来保存解析出来的额数据,显示在textview UserBean userBean; List<UserBean> bList=new ArrayList<UserBean>(); try { object=new JSONObject(jsonString); //用json格式的字符串获取一个JSONObject对象 jsonArray=object.getJSONArray("userDate"); //通过key,获取JSONObject里面的一个JSONArray数组 for (int i = 0; i < jsonArray.length(); i++) { //遍历数据 object=jsonArray.getJSONObject(i); //从JSONArray里面获取一个JSONObject对象 userBean=new UserBean(); userBean.setUserId(object.getInt("userId")); //通过key,获取里面的数据 userBean.setUserName(object.getString("userName")); bList.add(userBean); } } catch (JSONException e) { e.printStackTrace(); } for (int i = 0; i < bList.size(); i++) { stringBuilder.append("用户id:"+bList.get(i).getUserId()).append(" ").append("用户名字:"+bList.get(i).getUserName()); } textView.setText(stringBuilder.toString().replace("null", "")); } private void changeJsonToData2() { try { object=new JSONObject(jsonString2); String userName=object.getString("userName"); String userIdString=object.getString("userId"); textView.setText("用户id"+userIdString+"用户名字:"+userName); } catch (JSONException e) { e.printStackTrace(); } } }