把数据转换成json格式的字符串

最近写程序遇到一个问题,把一些数据转换成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格式的字符串

在Java中,将JSON字符串换为JSON格式数据通常会使用一些流行的第三方库,如Jackson或Gson。这些库提供了一系列的工具类和方法来方便地将JSON字符串解析成Java对象,或者将Java对象序列化成JSON字符串。以下是使用这两种库进行换的基本步骤: 1. **使用Jackson库:** - 首先,需要添加Jackson库的依赖到你的项目中。如果你使用Maven,可以在`pom.xml`中添加以下依赖: ```xml <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.12.3</version> </dependency> ``` - 使用`ObjectMapper`类的`readTree`方法将JSON字符串换为`JsonNode`对象,或者使用`readValue`方法将JSON字符串换为具体的Java对象。 ```java ObjectMapper mapper = new ObjectMapper(); String jsonStr = ...; // JSON字符串 JsonNode rootNode = mapper.readTree(jsonStr); // 或者换为具体对象 MyObject obj = mapper.readValue(jsonStr, MyObject.class); ``` 2. **使用Gson库:** - 同样,添加Gson库的依赖到你的项目中。Maven依赖如下: ```xml <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.8.6</version> </dependency> ``` - 使用`Gson`类的`fromJson`方法将JSON字符串换为具体的Java对象,或者使用`toJson`方法将Java对象换为JSON字符串。 ```java Gson gson = new Gson(); String jsonStr = ...; // JSON字符串 MyObject obj = gson.fromJson(jsonStr, MyObject.class); // 或者换为JSON字符串 String jsonString = gson.toJson(obj); ``` 在使用这些库的时候,需要确保你的JSON字符串格式正确的,否则解析时可能会抛出异常。同时,你的Java类应该与JSON字符串的结构相匹配,这样才能正确地进行序列化和反序列化操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

时代新人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值