将Map转换为JSON在Java中

huangapple go评论96阅读模式
英文:

Converting Map to JSON in Java

问题

我有一个地图

  1. Map<String, Application.RiskFactor> appRiskFactorsMap = app.getRiskFactors();

它里面有这种数据

  1. {risk1=Application.RiskFactor(risk=risk1, question=question1,
  2. factor=true), risk2=Application.RiskFactor(risk=risk2,
  3. question=question2?, factor=true),
  4. risk3=Application.RiskFactor(risk=risk3, question=question3?,
  5. factor=true)}

我将其转换为JSON,并获得此输出。

  1. {"risk1":{"risk":"risk1","question":"question1?","factor":"true"},"":
  2. {"risk":"risk2","question":"question2?","factor":"true"},"risk3":
  3. {"risk":"risk3","question":"question3?","factor":"true"}}

我有这个JSON转换器类
package system.referee.util;

  1. import com.fasterxml.jackson.annotation.JsonInclude;
  2. import com.fasterxml.jackson.core.JsonProcessingException;
  3. import com.fasterxml.jackson.databind.DeserializationFeature;
  4. import com.fasterxml.jackson.databind.ObjectMapper;
  5. public final class JsonUtils {
  6. private static final ObjectMapper MAPPER = new ObjectMapper();
  7. static {
  8. // 反序列化时忽略未知字段
  9. MAPPER.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
  10. // 序列化时忽略 null 和 Optional.EMPTY 字段
  11. MAPPER.setSerializationInclusion(JsonInclude.Include.NON_ABSENT);
  12. }
  13. public static <T> String toJson(T obj) {
  14. try {
  15. return MAPPER.writeValueAsString(obj);
  16. } catch (JsonProcessingException e) {
  17. return "";
  18. }
  19. }
  20. public static <T> T fromJson(String json, Class<T> type) {
  21. try {
  22. return MAPPER.readValue(json, type);
  23. } catch (JsonProcessingException e) {
  24. return null;
  25. }
  26. }
  27. }

我想以这种格式打印JSON

  1. {"risk":"risk1","question":"question1?","factor":"true"},
  2. {"risk":"risk2","question":"question2?","factor":"true"},
  3. {"risk":"risk3","question":"question3?","factor":"true"}

有没有办法实现这样的格式?我无法找到任何关于这个的帮助。非常感谢

英文:

I am having a map

  1. Map&lt;String, Application.RiskFactor&gt; appRiskFactorsMap = app.getRiskFactors();

It has this data kind of in it

  1. {risk1=Application.RiskFactor(risk=risk1, question=question1,
  2. factor=true), risk2=Application.RiskFactor(risk=risk2,
  3. question=question2?, factor=true),
  4. risk3=Application.RiskFactor(risk=risk3, question=question3?,
  5. factor=true)}

I am converting it into JSON and having this output.

  1. {&quot;risk1&quot;:{&quot;risk&quot;:&quot;risk1&quot;,&quot;question&quot;:&quot;question1?&quot;,&quot;factor&quot;:&quot;true&quot;},&quot;&quot;:
  2. {&quot;risk&quot;:&quot;risk2&quot;,&quot;question&quot;:&quot;question2?&quot;,&quot;factor&quot;:&quot;true&quot;},&quot;risk3&quot;:
  3. {&quot;risk&quot;:&quot;risk3&quot;,&quot;question&quot;:&quot;question3?&quot;,&quot;factor&quot;:&quot;true&quot;}}

I have this JSON converter class
package system.referee.util;

  1. import com.fasterxml.jackson.annotation.JsonInclude;
  2. import com.fasterxml.jackson.core.JsonProcessingException;
  3. import com.fasterxml.jackson.databind.DeserializationFeature;
  4. import com.fasterxml.jackson.databind.ObjectMapper;
  5. public final class JsonUtils {
  6. private static final ObjectMapper MAPPER = new ObjectMapper();
  7. static {
  8. // Ignore unknown fields while deserialization
  9. MAPPER.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
  10. // Ignore null &amp; Optional.EMPTY fields while serialization
  11. MAPPER.setSerializationInclusion(JsonInclude.Include.NON_ABSENT);
  12. }
  13. public static &lt;T&gt; String toJson(T obj) {
  14. try {
  15. return MAPPER.writeValueAsString(obj);
  16. } catch (JsonProcessingException e) {
  17. return &quot;&quot;;
  18. }
  19. }
  20. public static &lt;T&gt; T fromJson(String json, Class&lt;T&gt; type) {
  21. try {
  22. return MAPPER.readValue(json, type);
  23. } catch (JsonProcessingException e) {
  24. return null;
  25. }
  26. }
  27. }

I want to print the JSON in this format

  1. {&quot;risk&quot;:&quot;risk1&quot;,&quot;question&quot;:&quot;question1?&quot;,&quot;factor&quot;:&quot;true&quot;},
  2. {&quot;risk&quot;:&quot;risk2&quot;,&quot;question&quot;:&quot;question2?&quot;,&quot;factor&quot;:&quot;true&quot;},
  3. {&quot;risk&quot;:&quot;risk3&quot;,&quot;question&quot;:&quot;question3?&quot;,&quot;factor&quot;:&quot;true&quot;}

is there any way to achieve that? I am unable to find any help with this. thanks a lot

答案1

得分: 1

你应该忽略键,只对值进行序列化:

  1. JsonUtils.toJson(appRiskFactorsMap.values())

结果将是一个 JSON 数组

英文:

You should ignore keys and serialise only values:

  1. JsonUtils.toJson(appRiskFactorsMap.values())

Result will be a JSON Array.

huangapple
  • 本文由 发表于 2020年10月1日 14:26:25
  • 转载请务必保留本文链接:https://go.coder-hub.com/64150125.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定