【问题标题】:Appending semicolon to each item in array and comma to set of array objects, to form a string将分号附加到数组中的每个项目,并将逗号附加到数组对象集,以形成一个字符串
【发布时间】:2019-08-28 09:01:07
【问题描述】:
  1. 我有一个 JSON 数组,例如 {"payment":[{"a":"11","b":"21","c":"34","d":"0"},{"a":"54","b":"66","c":"21","d":"76"},{"a":"34","b":"23","c":"43","d":"88"}]} 我已经迭代了数组中的每个项目以形成一个字符串。

  2. 我正在尝试丢弃数组中“d”等于 0(零)的数组对象。例如:{"a":"11","b":"21","c":"34","d":"0"}

  3. 我在每个项目之间添加了一个分号,并在每个数组对象中添加了一个逗号:{54;66;21;76,34;23;43;88}

  4. 但我需要这样的最终结果:{"payment":"54;66;21;76,34;23;43;88"}

代码:

public class TestJson {

public static void main(String[] args) {
    String jsonArray = "{\"payments\":[{\"a\":\"11\",\"b\":\"21\",\"c\":\"34\",\"d\":\"0\"},{\"a\":\"54\",\"b\":\"66\",\"c\":\"21\",\"d\":\"76\"},{\"a\":\"34\",\"b\":\"23\",\"c\":\"43\",\"d\":\"88\"}]}";
    JsonObject jsonObject2 = new Gson().fromJson(jsonArray, JsonObject.class);

    String key = "";
    JsonObject innerObj = new JsonObject();
    StringBuilder joinBuilder = new StringBuilder();
    JsonArray paymentsArray = jsonObject2.getAsJsonArray("payments");

    for (JsonElement jsonElement : paymentsArray) {
        Set<Entry<String, JsonElement>> elemEntry = ((JsonObject) jsonElement).entrySet();
        Iterator<Entry<String, JsonElement>> itr = elemEntry.iterator();
        String finalVal = "";
        String semiColon = "";
        while (itr.hasNext()) {
            Entry<String, JsonElement> entry = itr.next();
            key = entry.getKey();
            JsonPrimitive valuePrim = entry.getValue().getAsJsonPrimitive();
            if (valuePrim.isString()) {
                finalVal = valuePrim.getAsString();
            }
            joinBuilder.append(semiColon).append(finalVal);
            semiColon = ";";
        }
        joinBuilder.append(",");
    }
    innerObj.addProperty("payments", joinBuilder.toString());
    System.out.println(innerObj.toString());
}}

输出:{"payments":"11;21;34;0,54;66;21;76,34;23;43;88,"}

但我需要删除字符串末尾的逗号,如果“d”字段为 0,则丢弃整个数组对象。例如:{11;21;34;0}

【问题讨论】:

  • 要求很高
  • 你有什么尝试吗?
  • 祝你好运!我们不会为您编写代码。
  • 这是我在 stackoverflow 上的第一篇文章。我将改进我的帖子并添加我尝试过的示例代码。谢谢

标签: java arrays gson


【解决方案1】:

我解决了这个问题。

代码:

public static void main(String[] args) {
    String jsonArray = "{\"payments\":[{\"a\":\"11\",\"b\":\"21\",\"c\":\"34\",\"d\":\"0\"},{\"a\":\"54\",\"b\":\"66\",\"c\":\"21\",\"d\":\"76\"},{\"a\":\"34\",\"b\":\"23\",\"c\":\"43\",\"d\":\"88\"}]}";
    JsonObject jsonObject2 = new Gson().fromJson(jsonArray, JsonObject.class);
    JsonObject innerObj = new JsonObject();
    StringBuilder joinBuilder = new StringBuilder();
    Map<String, String> testMap = new LinkedHashMap<String, String>();
    JsonArray paymentsArray = jsonObject2.getAsJsonArray("payments");
    for (JsonElement jsonElement : paymentsArray) {
        Set<Entry<String, JsonElement>> elemEntry = ((JsonObject) jsonElement).entrySet();
        Iterator<Entry<String, JsonElement>> itr = elemEntry.iterator();
        while (itr.hasNext()) {
            Entry<String, JsonElement> entry = itr.next();
            testMap.put(entry.getKey(), entry.getValue().getAsString());
        }
        if (testMap.get("d").equals("0")) {
            testMap.clear();
        } else {
            joinBuilder.append(StringUtils.join(testMap.values(), ';')).append(",");
        }
    }
    joinBuilder.deleteCharAt(joinBuilder.length() - 1);
    innerObj.addProperty("payments", joinBuilder.toString());
    System.out.println(innerObj.toString());
}

输出:{"payments":"54;66;21;76,34;23;43;88"}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-15
    • 1970-01-01
    • 2015-10-11
    • 2014-06-13
    • 2013-08-16
    • 1970-01-01
    • 2020-07-07
    • 1970-01-01
    相关资源
    最近更新 更多