在 Java 中将 HashMap 写入 JSON

Posted

技术标签:

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

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

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

谢谢,

【问题讨论】:

可能是***.com/questions/12155800/…的副本 这里有你需要的一切mkyong.com/java/… 【参考方案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

【讨论】:

答案应该主要在***中回答,而不仅仅是指向其他站点。 感谢您的评论。当我回答未来的问题时会记住这一点。

以上是关于在 Java 中将 HashMap 写入 JSON的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Swift 中将 JSON 写入 Realm

在 PowerShell 中将没有展平列表的 JSON 数组写入文件

如何在 Java 中将 HashMap 转换为 List?

在JS中将对象数组减少为hashmap

危险!在HashMap中将可变对象用作Key

如果我同时(从多个线程)写入java.util.HashMap会发生什么最糟糕的事情?