有序的JSON如何实现,手写简单Demo

背景

在工作中,我遇到了一个比较不常见的接口要求, 需要我们的入参是有序的,因为我们用JSON底层都是Map,那么肯定是无须的,所以得手写一个有序JSON

使用案例

//创建对象
PowerJson powerJson = new PowerJson();
//放入key 和value
powerJson.put("xxx", "test");
//转成JSON字符串
Stirng needJson = powerJson.getJson();

有序JSON代码

import java.util.ArrayList;
import java.util.List;
public class PowerJson {
    private List<String> params;
    private List<String> values;
    public PowerJson() {
        this.params = new ArrayList<>();
        this.values = new ArrayList<>();
    }
    public List<String> getParams() {
        return params;
    }
    public void setParams(List<String> params) {
        this.params = params;
    }
    public List<String> getValues() {
        return values;
    }
    public void setValues(List<String> values) {
        this.values = values;
    }
    public void put(String key, String value) {
        params.add(key);
        values.add(value);
    }

    public String getJson() {
        String s = "\"";
        String b = ":";
        StringBuilder builder = new StringBuilder();
        for (int i = 0; i < params.size(); i++) {
            if (i == 0) {
                builder.append("{");
            }
            //数组、对象等特殊处理
            String value = values.get(i);
            if (value.startsWith("{")) {
                builder.append(s).append(params.get(i)).append(s).append(b).append(values.get(i));
            } else {
                //否则得加 “”
                builder.append(s).append(params.get(i)).append(s).append(b).append(s).append(values.get(i)).append(s);
            }

            if (i != params.size() - 1) {
                builder.append(",");
            }
            if (i == params.size() - 1) {
                builder.append("}");
            }
        }
        return builder.toString();
    }
}

如果是JSON嵌套JSON,产生多余字符,用这个即可去除

` 如果你的JSON中存放的value 也是一个JSON字符串,那么会有多余的 \符号,这是需要手动去除的, 用下面这个代码就行了。

    JSONArray array = new JSONArray();
    array.add(powerJson.getJson());
    //最外层data
    JSONObject data = new JSONObject();
    data.put("data", array);
    // 去除JSON转字符串后的多余斜杠。
    String replace = data.toString()
            .replace("\\", "")
            .replace("\"[\"", "[")
            .replace("\"]\"", "]")
            .replace("\"{", "{")
            .replace("}\"", "}");
    //返回值
    return replace;

`

posted @ 2022-07-26 16:13  Rick_Leee  阅读(474)  评论(0)    收藏  举报