【问题标题】:Get a value list of a enum to a json object将枚举的值列表获取到 json 对象
【发布时间】:2022-01-13 05:02:45
【问题描述】:

我想创建一个值为“3D Tour”、“Videos”、“Photos Only”等值的 json 对象。您可以在下面找到枚举类。我该如何实现呢?

package com.padgea.listing.application.dto;

public enum General implements Catalogue {

Tour("3D Tour"),
Videos("Videos"),
Photos_Only("Photos Only"),
Price_Reduced("Price Reduced"),
Furnished("Furnished"),
Luxury("Luxury");

private final String value;

General(String value) {
    this.value = value;
}

public String getValue() {
    return value;
}

}

我需要这样的输出 {General : "3D Tour","Videos","Photos Only",etc}

【问题讨论】:

  • 您能提供更多上下文吗?也许是这些值的关键,您是否使用任何库来处理 JSON?
  • 请不要发布代码图片,而是发布格式良好的文本。为什么?见这里:idownvotedbecau.se/imageofcode
  • 请粘贴代码而不是使用屏幕截图。澄清“具有值 A、B、C 的 JSON”是否是指具有所有这些值之一的 JSON。这些是否应该是 keys 然后可以采用不同的值或值本身?在那种情况下,钥匙是什么?否则,价值从何而来。理想情况下 - 给出一个示例输入和一个示例输出。
  • 你能详细说明那个 json 对象应该是什么样子吗?你的意思是 object 还是数组?如果是一个对象,键是什么,值是什么?
  • 如果这是用于用户界面中的 SELECT 元素,您可能还需要枚举名称。此外,将显示文本保存在本地化文件而不是代码中可能是更好的做法。例如。一个 frontend.properties 文件,其中包含“Tour = 3D Tour”之类的行。这样可以轻松添加语言支持,还可以在不接触代码的情况下更改显示文本。

标签: java json enums


【解决方案1】:

这将返回一个包含所有值的字符串列表。

    enum General implements Catalogue {

    Tour("3D Tour"),
    Videos("Videos"),
    Photos_Only("Photos Only"),
    Price_Reduced("Price Reduced"),
    Furnished("Furnished"),
    Luxury("Luxury");

    private final String value;

    General(String value) {
        this.value = value;
    }

    public String getValue() {
        return value;
    }
    
    public static List<String> valuesList() {
        return Arrays.stream(General.values())
                          .map(General::getValue)
                          .collect(Collectors.toList());
    }
}

升级后你会做类似的事情

myJson.put("General", General.valuesList())

输出将是

 {
    "General": ["3D Tour","Videos","Photos Only"]
 }

【讨论】:

    【解决方案2】:

    有效的 JSON 如下所示

    {
        "General": ["3D Tour","Videos","Photos Only"]
    }
    

    如果您要使用 Jackson 库来创建 JSON,您需要创建一个像这样的类:

    public class GeneralDTO {
        @JsonProperty("General")
        private String[] general;
    
        ...
    }
    

    然后你需要创建你的 GeneralDTO 对象。

    您可以像这样在数组中获取所有枚举值

    String[] generalArray = Arrays.stream(General.values())
        .map(st -> st.getValue())
        .toArray(String[]::new);
    

    然后使用ObjectMapper 类(Jackson 库的一部分)的方法writeValueAsString,您可以从您的GeneralDTO 对象中获取JSON 字符串。

    为简化起见,您可以使用Map&lt;String, String[]&gt; 代替GeneralDTO

    Map<String, String[]> generalObject = new HashMap<>;
    generalObject.put("General", generalArray);
    ObjectMapper objectMapper = new ObjectMapper();
    String json = objectMapper.writeValueAsString(generalObject);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-23
      • 1970-01-01
      相关资源
      最近更新 更多