如何使用干净的代码在 Java 中生成 JSON

How to generate JSON in Java with clean code

提问人:mr.Gondar 提问时间:10/14/2023 更新时间:10/14/2023 访问量:58

问:

我有这样的代码:

Map<String, Object> tempParam = new HashMap<>();
tempParam.put("custid", "123");
json = gson.toJson(tempParam);

String keyParams = "schema;tablename;where;clause";
String valueParams = "dbtrial;mastercustomer;"+json+";sort=id,date_&limit=10";

String res = genJSON(keyParams, valueParams);

function genJSON(String keyParams, String valueParams){

    String[] key = keyParams.split(";");
    String[] value = valueParams.split(";");

    JSONObject objectMessage = new JSONObject();
    for(int i = 0 ; i < key.length ; i++){
        objectMessage.put(key[i], value[i]);
    }

    return objectMessage.toString();
    
}

我关心的是用分号分隔符书写的方式,然后拆分, 有没有另一种更简单或更有效的方法?我们能让它更有活力吗? 因为“genJSON”函数将全局用于各种需求。 至少我想要干净的代码。

我尝试过使用这样的数组,但它似乎没有太大区别。

String[] keyParams = ["schema", "tablename", "where", "clause"];
String[] valueParams = {"dbtrial", "mastercustomer", json, "sort=id,date_&limit=10"};

function genJSON(String[] keyParams, String[] valueParams){

    JSONObject objectMessage = new JSONObject();
    for(int i = 0 ; i < keyParams.length ; i++){
        objectMessage.put(keyParams[i], valueParams[i]);
    }

    return objectMessage.toString();
}

您还有其他想法或建议吗?

我用的是java 7

Java JSON Spring 性能 编码风格

评论

1赞 Rifat Rubayatul Islam 10/14/2023
为什么不使用像您正在使用的地图来生成对象一样呢?jsongson
1赞 Holger 10/16/2023
首先,这甚至不是有效的 Java 代码。您看不到这些变体之间的差异,因为周围的代码很可能通过网络发送请求的代码主导了执行时间。即使你孤立地看字符串生成,隐藏在字符串之下的工作也超过了你对八个字符串的处理。如果其中七个字符串是常量,为什么不首先编写 JSON 字符串,JSONObjectString result = """ { "schema": "dbtrial", "tablename" : "mastercustomer", "where" : """ + json + """, "clause": "sort=id,date_&limit=10" } """;

答:

-1赞 fasthosting 10/14/2023 #1

您尝试将数组用于 and 是使代码更简洁、更易于维护的好主意。但是,在 Java 中初始化数组的方式存在一个小问题。下面是更正后的代码:keyParamsvalueParams

import org.json.JSONObject;

public class Main {
    public static void main(String[] args) {
        JSONObject tempParam = new JSONObject();
        tempParam.put("custid", "123");
        String json = tempParam.toString();

        String[] keyParams = {"schema", "tablename", "where", "clause"};
        String[] valueParams = {"dbtrial", "mastercustomer", json, "sort=id,date_&limit=10"};

        String res = genJSON(keyParams, valueParams);
        System.out.println(res);
    }

    public static String genJSON(String[] keyParams, String[] valueParams) {
        JSONObject objectMessage = new JSONObject();
        for (int i = 0; i < keyParams.length; i++) {
            objectMessage.put(keyParams[i], valueParams[i]);
        }

        return objectMessage.toString();
    }
}

此代码将按预期工作,并且它是一种更简洁的方法来管理 和 .使用数组的主要优点是,它允许更好地组织和可读性代码,尤其是在参数数量增加的情况下。keyParamsvalueParams