利用android sdk里面的
JSONObject和JSONArray把集合或者普通数据,转换成json格式的字符串
JSONObject和 JSONArray解析json格式的字符串为集合或者一般数据 001 | import java.util.ArrayList; |
002 | import java.util.List; |
003 |
004 | import org.json.JSONArray; |
005 | import org.json.JSONException; |
006 | import org.json.JSONObject; |
007 |
008 | import android.app.Activity; |
009 | import android.os.Bundle; |
010 | import android.util.Log; |
011 | import android.view.View; |
012 | import android.view.View.OnClickListener; |
013 | import android.widget.Button; |
014 | import android.widget.TextView; |
015 | import android.widget.Toast; |
016 |
017 | public class MainActivity extends Activity implements OnClickListener { |
018 | private Button button1, button2, button3, button4; //4个按钮 |
019 | private TextView textView; //显示处理结果的textview |
020 | private List<UserBean> userBeans; //保存数据的集合 |
021 | private JSONObject object; //JSONObject对象,处理一个一个的对象 |
022 | private JSONObject object2; |
023 | private JSONArray jsonArray; //JSONObject对象,处理一个一个集合或者数组 |
024 | private String jsonString; //保存带集合的json字符串 |
025 | private String jsonString2; //不带集合的json字符串 |
026 | @Override |
027 | protected void onCreate(Bundle savedInstanceState) { |
028 | super .onCreate(savedInstanceState); |
029 | setContentView(R.layout.main); |
030 | initView(); //初始化控件 |
031 | initDate(); //初始化数据 |
032 | setListener(); //绑定监事件 |
033 |
034 | } |
035 |
036 | private void initView() { |
037 | button1 = (Button) findViewById(R.id.bt1); |
038 | button2 = (Button) findViewById(R.id.bt2); |
039 | button3 = (Button) findViewById(R.id.bt3); |
040 | button4 = (Button) findViewById(R.id.bt4); |
041 | textView = (TextView) findViewById(R.id.text); |
042 | } |
043 | /** |
044 | * 初始化2个用户对象 |
045 | */ |
046 | private void initDate() { |
047 | userBeans = new ArrayList<UserBean>(); |
048 | UserBean userBean = new UserBean(); |
049 | userBean.setUserId( 1 ); |
050 | userBean.setUserName( "hck" ); |
051 | userBeans.add(userBean); |
052 |
053 | UserBean userBean2 = new UserBean(); |
054 | userBean2.setUserId( 2 ); |
055 | userBean2.setUserName( "蝌蚪" ); |
056 | userBeans.add(userBean2); |
057 |
058 | } |
059 |
060 | private void setListener() { |
061 | button1.setOnClickListener( this ); |
062 | button2.setOnClickListener( this ); |
063 | button3.setOnClickListener( this ); |
064 | button4.setOnClickListener( this ); |
065 | } |
066 |
067 | private void changeArrayDateToJson() { //把一个集合转换成json格式的字符串 |
068 | jsonArray= null ; |
069 | object= null ; |
070 | jsonArray = new JSONArray(); |
071 | object= new JSONObject(); |
072 | for ( int i = 0 ; i < userBeans.size(); i++) { //遍历上面初始化的集合数据,把数据加入JSONObject里面 |
073 | object2 = new JSONObject(); //一个user对象,使用一个JSONObject对象来装 |
074 | try { |
075 | object2.put( "userId" , userBeans.get(i).getUserId()); //从集合取出数据,放入JSONObject里面 JSONObject对象和map差不多用法,以键和值形式存储数据 |
076 | object2.put( "userName" , userBeans.get(i).getUserName()); |
077 | jsonArray.put(object2); //把JSONObject对象装入jsonArray数组里面 |
078 | } catch (JSONException e) { |
079 | e.printStackTrace(); |
080 | } |
081 | } |
082 | try { |
083 | object.put( "userDate" , jsonArray); //再把JSONArray数据加入JSONObject对象里面(数组也是对象) |
084 | //object.put("time", "2013-11-14"); //这里还可以加入数据,这样json型字符串,就既有集合,又有普通数据 |
085 | } catch (JSONException e) { |
086 | e.printStackTrace(); |
087 | } |
088 | jsonString= null ; |
089 | jsonString = object.toString(); //把JSONObject转换成json格式的字符串 |
090 | textView.setText(jsonString); |
091 | Log.i( "hck" , "转换成json字符串: " + jsonString); |
092 |
093 | } |
094 | private void changeNotArrayDateToJson() { |
095 | object= null ; |
096 | object= new JSONObject(); |
097 | try { |
098 | object.put( "userId" , "1" ); //把数据加入JSONObject对象即可,"userid"相当于map里面的key,1即为value的值。 |
099 | object.put( "userName" , "hck" ); |
100 | } catch (JSONException e) { |
101 | e.printStackTrace(); |
102 | } |
103 | jsonString2= null ; |
104 | jsonString2 = object.toString(); //把JSONObject转换成json格式的字符串 |
105 | Log.i( "hck" , "转换成json字符串: " + jsonString2); |
106 | textView.setText(jsonString2); |
107 | } |
108 |
109 | @Override |
110 | public void onClick(View v) { |
111 | switch (v.getId()) { |
112 | case R.id.bt1: |
113 | changeNotArrayDateToJson(); //点击第一个按钮,把集合转换成json数据格式的string |
114 | break ; |
115 |
116 | case R.id.bt2: |
117 | changeArrayDateToJson(); //点击第2个按钮,把普通数据换成json数据格式的string |
118 | break ; |
119 | case R.id.bt3: //解析不带集合的json字符串 |
120 | if (jsonString2== null || "" .equals(jsonString2)) { |
121 | Toast.makeText(MainActivity. this , "请先点击上面第1个按钮转把数据换成json字符串" , Toast.LENGTH_LONG).show(); |
122 | return ; |
123 | } |
124 | changeJsonToData2(); |
125 | break ; |
126 | case R.id.bt4: //解析带集合的json字符串 |
127 | if (jsonString== null || "" .equals(jsonString)) { |
128 | Toast.makeText(MainActivity. this , "请先点击第2按钮把数据换成json字符串" , Toast.LENGTH_LONG).show(); |
129 | return ; |
130 | } |
131 | changeJsonToData1(); |
132 | break ; |
133 | default : |
134 | break ; |
135 | } |
136 |
137 | } |
138 | private void changeJsonToData1() |
139 | { |
140 | StringBuilder stringBuilder= new StringBuilder(); //用来保存解析出来的额数据,显示在textview |
141 | UserBean userBean; |
142 | List<UserBean> bList= new ArrayList<UserBean>(); |
143 | try { |
144 | object= new JSONObject(jsonString); //用json格式的字符串获取一个JSONObject对象 |
145 | jsonArray=object.getJSONArray( "userDate" ); //通过key,获取JSONObject里面的一个JSONArray数组 |
146 | for ( int i = 0 ; i < jsonArray.length(); i++) { //遍历数据 |
147 | object=jsonArray.getJSONObject(i); //从JSONArray里面获取一个JSONObject对象 |
148 | userBean= new UserBean(); |
149 | userBean.setUserId(object.getInt( "userId" )); //通过key,获取里面的数据 |
150 | userBean.setUserName(object.getString( "userName" )); |
151 | bList.add(userBean); |
152 | } |
153 | } catch (JSONException e) { |
154 | e.printStackTrace(); |
155 | } |
156 | for ( int i = 0 ; i < bList.size(); i++) { |
157 | stringBuilder.append( "用户id:" +bList.get(i).getUserId()).append( " " ).append( "用户名字:" +bList.get(i).getUserName()); |
158 | } |
159 | textView.setText(stringBuilder.toString().replace( "null" , "" )); |
160 | } |
161 | private void changeJsonToData2() |
162 | { |
163 | try { |
164 | object= new JSONObject(jsonString2); |
165 | String userName=object.getString( "userName" ); |
166 | String userIdString=object.getString( "userId" ); |
167 | textView.setText( "用户id" +userIdString+ "用户名字:" +userName); |
168 | } catch (JSONException e) { |
169 | e.printStackTrace(); |
170 | } |
171 | } |
172 | } |