android實現json數據的解析和把數據轉換成json格式的字符串


利用android sdk里面的

JSONObject和JSONArray把集合或者普通數據,轉換成json格式的字符串

JSONObject和JSONArray解析json格式的字符串為集合或者一般數據

package com.hck.test;

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();
        }
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM