最近写程序遇到一个问题,把一些数据转换成json格式的字符串保存起来,这些数据有普通的键值对,还有列表类型的,下面写了一个小例子,列表数据以复选框CheckBox形式来展示,另外模拟加了一个普通数据的字段,当点击提交按钮时将EditText和选中的复选框的内容拼接成一个json字符串,效果如下图所示:
这里写图片描述
实现源码:
主要功能类MainActivity

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.TextView;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {

    private CheckBox cb1, cb2, cb3, cb4, cb5;
    private List<CheckBox> checkBoxList = new ArrayList<CheckBox>();
    private Button btn_submit;
    private TextView tv_jsonString;
    private EditText et_workMode;

    private JSONObject object = null;  //JSONObject对象,处理一个一个的对象
    private JSONObject object2 = null;
    private JSONArray jsonArray = null;//JSONObject对象,处理一个一个集合或者数组
    private String jsonString = "";  //保存带集合的json字符串

    private List<CheckBoxInfo> checkBoxInfoList;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        initView();
    }

    private void initView() {
        cb1 = (CheckBox) findViewById(R.id.cb1);
        cb2 = (CheckBox) findViewById(R.id.cb2);
        cb3 = (CheckBox) findViewById(R.id.cb3);
        cb4 = (CheckBox) findViewById(R.id.cb4);
        cb5 = (CheckBox) findViewById(R.id.cb5);

        // 将所有的checkbox放到一个集合中
        checkBoxList.add(cb1);
        checkBoxList.add(cb2);
        checkBoxList.add(cb3);
        checkBoxList.add(cb4);
        checkBoxList.add(cb5);

        et_workMode = (EditText) findViewById(R.id.et_workMode);
        btn_submit = (Button) findViewById(R.id.btn_submit);
        tv_jsonString = (TextView) findViewById(R.id.tv_jsonString);
        btn_submit.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                checkBoxInfoList = new ArrayList<CheckBoxInfo>();
                //遍历集合中的checkBox,判断是否选择,获取选中的文本
                for (CheckBox checkbox : checkBoxList) {
                    if (checkbox.isChecked()) {
                        CheckBoxInfo checkBoxInfo = new CheckBoxInfo();
                        checkBoxInfo.setLike(checkbox.getText().toString());
                        checkBoxInfoList.add(checkBoxInfo);
                    }
                }
                changeArrayDateToJson();
            }
        });
    }


    private void changeArrayDateToJson() {  //把一个集合转换成json格式的字符串
        jsonArray = new JSONArray();
        object = new JSONObject();
        for (int i = 0; i < checkBoxInfoList.size(); i++) {  //遍历上面初始化的集合数据,把数据加入JSONObject里面
            object2 = new JSONObject();//一个user对象,使用一个JSONObject对象来装
            try {
                object2.put("like", checkBoxInfoList.get(i).getLike());  //从集合取出数据,放入JSONObject里面 JSONObject对象和map差不多用法,以键和值形式存储数据
                jsonArray.put(object2); //把JSONObject对象装入jsonArray数组里面
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }

        try {
            object.put("likeList", jsonArray); //再把JSONArray数据加入JSONObject对象里面(数组也是对象)
            object.put("workMode", et_workMode.getText().toString()); //这里还可以加入数据,这样json型字符串,就既有集合,又有普通数据
        } catch (JSONException e) {
            e.printStackTrace();
        }
        jsonString = object.toString(); //把JSONObject转换成json格式的字符串
        tv_j`
onString.setText(jsonString);
        Log.e("tag", "转换成json字符串: " + jsonString);
    }

}

XML布局文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <TextView
            android:id="@+id/tv_workMode"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerVertical="true"
            android:text="工作模式"/>
        <EditText
            android:id="@+id/et_workMode"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_toRightOf="@+id/tv_workMode"
            android:layout_marginLeft="10dp"
            android:hint="请填写工作模式"
            android:textSize="14sp"/>
    </RelativeLayout>

    <CheckBox
        android:id="@+id/cb1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="体育"/>

    <CheckBox
        android:id="@+id/cb2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="音乐"/>

    <CheckBox
        android:id="@+id/cb3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="美术"/>

    <CheckBox
        android:id="@+id/cb4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="英语"/>
    <CheckBox
        android:id="@+id/cb5"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="语文"/>

    <Button
        android:id="@+id/btn_submit"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="提交"/>

    <TextView
        android:id="@+id/tv_jsonString"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="jsonString:"/>

</LinearLayout>

两个实体类
SettingDataInfo

package com.junto.splicingjson;
import java.io.Serializable;
import java.util.List;

/**
 * Created by WangJinyong on 2017/9/20.
 */

public class SettingDataInfo implements Serializable {

    private String workMode;
    private List<CheckBoxInfo> checkBoxInfoList;

    public String getWorkMode() {
        return workMode;
    }

    public void setWorkMode(String workMode) {
        this.workMode = workMode;
    }

    public List<CheckBoxInfo> getCheckBoxInfoList() {
        return checkBoxInfoList;
    }

    public void setCheckBoxInfoList(List<CheckBoxInfo> checkBoxInfoList) {
        this.checkBoxInfoList = checkBoxInfoList;
    }
}

CheckBoxInfo 存放CheckBox列表

package com.junto.splicingjson;

import java.io.Serializable;

/**
 * Created by WangJinyong on 2017/9/20.
 */

public class CheckBoxInfo implements Serializable {

    private String like;

    public String getLike() {
        return like;
    }

    public void setLike(String like) {
        this.like = like;
    }
}

以上内容即可实现把数据转换成json格式的字符串

GitHub 加速计划 / js / json
41.72 K
6.61 K
下载
适用于现代 C++ 的 JSON。
最近提交(Master分支:1 个月前 )
960b763e 4 个月前
8c391e04 6 个月前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐