【问题标题】:Write HashMap to JSON in Java在 Java 中将 HashMap 写入 JSON
【发布时间】:2014-05-21 04:47:17
【问题描述】:

我是 Java 新手。我一直在做一个使用 Maven 和 Java 1.7 的项目。在我的项目中,我有一个 HashMap。我想将此 HashMap 输出到 JSON。目前推荐的方法是什么?

当我进行 Google 搜索时,我会得到很多选择(例如 Jackson)。但是,我不确定我应该使用什么。另外,我想使用一个可以通过 Maven 访问的库。

谢谢,

【问题讨论】:

标签: java json


【解决方案1】:

Underscore-java库可以将哈希映射或数组列表转换为json,反之亦然。

代码示例:

import com.github.underscore.lodash.U;
import java.util.*;

public class Main {

    @SuppressWarnings("unchecked")
    public static void main(String[] args) {

      Map<String, Object> map = new HashMap<String, Object>();
      map.put("1", "a");
      map.put("2", "b");

      System.out.println(U.toJson(map));

      Map<String, Object> newMap = (Map<String, Object>) U.fromJson($.toJson(map));         
      System.out.println(newMap.get("1")); // -> "a"

    }
}

【讨论】:

    【解决方案2】:

    如果您需要从 hashmap 创建 json 并且如果您没有嵌套映射:-

    private String createJsonString( Map<String, Object> map) {
        String jsonString = "{ ";
        Set<Map.Entry<String, Object>> entries = map.entrySet();
        for (Map.Entry<String, Object> entry : entries) {
    
            jsonString = jsonString + "\"" + entry.getKey() + "\"";
            jsonString += " : ";
            jsonString = jsonString + getJsonValue(entry.getValue());
            jsonString += ",  ";
        }
        int i = jsonString.lastIndexOf(",");
        jsonString = jsonString.substring(0, i);
        jsonString += " }";
        return jsonString;
    }
    
    private String getJsonValue(Object value) {
        if (value == null) {
            return "";
        } else if (value instanceof Number || value instanceof Boolean) {
            return value.toString();
        } else {
            return "\"" + value + "\"";
        }
    }
    

    【讨论】:

    • 这是错误的,因为它没有转义可能破坏 json 结构的 java 字符串值。
    【解决方案3】:

    您也可以使用Jackson,即in Maven。你可以这样使用它:

    Map<String,Object> map = .... // create a map
    ObjectMapper mapper = new ObjectMapper()
    String jsonFromMap = mapper.writeValueAsString(map);
    

    请注意,ObjectMapper 有许多其他方法可以读取/读取对象。

    我推荐它,因为它易于使用,支持注释,可用于生产并被许多组织使用,而且可能最重要的是,它集成在许多现有框架(Spring、Jersey、RESTeasy、Camel 等)中。

    我对 GSON 不熟悉,但有一个 discussion 关于这两个你可能想看看。

    【讨论】:

      【解决方案4】:

      您可以使用Google GSON 库。

      只需将其添加到您的 pom 中

      <dependency>
          <groupId>com.google.code.gson</groupId>
          <artifactId>gson</artifactId>
          <version>2.2.4</version>
      </dependency>
      

      并将这个类添加到你的项目中

      import java.lang.reflect.Type;
      import java.util.*;
      import com.google.gson.*;
      import com.google.gson.reflect.TypeToken;
      
      public class JsonHelper {
          private static final Gson gson = new GsonBuilder().disableHtmlEscaping().create();
          private static final Type TT_mapStringString = new TypeToken<Map<String,String>>(){}.getType();
      
          public static Map<String, String> jsonToMapStringString(String json) {
              Map<String, String> ret = new HashMap<String, String>();
              if (json == null || json.isEmpty())
                  return ret;
               return gson.fromJson(json, TT_mapStringString);
          }
          public static String mapStringStringToJson(Map<String, String> map) {
              if (map == null)
                  map = new HashMap<String, String>();
               return gson.toJson(map);
          }
      }
      

      我猜你可以弄清楚如何使用它

      【讨论】:

        【解决方案5】:

        确实有很多java的json解析器。查看the json org link 以了解可用于 java 的不同 json 解析器。此外this link 为不同的 json 解析器提供了很好的简单教程。

        我个人在不需要大量 json 解析的应用程序中使用 simple json,而对于主要基于 json 并因此必须执行大量 json 的应用程序使用 gson

        【讨论】:

        • 答案应该主要在stackoverflow中回答,而不仅仅是指向其他站点。
        • 感谢您的评论。当我回答未来的问题时会记住这一点。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-11-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-10-31
        相关资源
        最近更新 更多