首页 > 解决方案 > 如何在java中创建一个动态的json主体

问题描述

我设置了一个数据表,我想做的是浏览表并根据表设置 json 正文。

我的想法是获取列名,并基于此,如果设置了值,则将其添加到正文中,然后作为请求发送。

例如:

|colour|food |
|      |pizza|
|red   |     |

因此,当它遍历第一行时,它应该创建一个 json 主体:

"food":"pizza"  

以上将作为请求发送。

请求完成后,我们移动到第二行,作为请求传递的 json 主体将是:

"color":"red"

如您所见,我们忽略了每一行中的缺失值,只通过其中包含值的字段(列)。

我的问题是如何构造那个 json 主体来做到这一点?

目前,我设法遍历列名,但不确定如何构造该动态主体。目前我有:

public void testMethod(final Table table) {

    table.getColumnNames().forEach(columnName -> {
        final String value = table.getTableRows().get(0).getCell(columnName);

        postRequest("/test/endpoint", getCurrentHeaders(), SerializationHelper.asString(body));

    });
}

我还没有设置正文,我只是想建立结构并希望有人可以填补创建“正文”变量的缺失部分,以通过预期的 json 正文请求。

标签: javajson

解决方案


在 JAVA 上,为了创建 JSON,我们 (I) 通常使用org.json命名空间。

首先创建对象:

JSONObject body = new JSONObject();

接下来用值填充它,对于每个表行迭代:

//this will be to fill the array config
JSONArray rowArray = new JSONArray();

//I don't know what your Table is
//  so this is just a pseudo code to get rows
table.getRows().forEach(row -> {
    table.getColumnNames().forEach(columnName -> {
        final String value = row.getCell(columnName);
        if(!value.equals("")){
            JSONObject thisColumn = new JSONObject();
            thisColumn.put(columnName, value);
            rowArray.put(thisColumn);
        }
    });
});

//now set our array into the JSON body
body.put("config", rowArray);

最后,在循环之外执行请求:

postRequest("/test/endpoint", getCurrentHeaders(), SerializationHelper.asString(body));

推荐阅读