在Java中将HashMap写入JSON

3
我刚开始接触Java。我正在做一个使用Maven和Java 1.7的项目。在我的项目中,我有一个HashMap。我想将这个HashMap输出为JSON。目前推荐使用哪种方法?
当我进行谷歌搜索时,我得到了很多选项(如Jackson)。但是,我不确定应该使用哪个。而且,我想使用一个可以通过Maven访问的库。
谢谢,

可能是 https://dev59.com/Rmct5IYBdhLWcg3wWMJF 的重复。 - Tuim
1
这里有你需要的一切:http://www.mkyong.com/java/how-do-convert-java-object-to-from-json-format-gson-api/ - nikis
5个回答

7
你可以使用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);
    }
}

我猜你能想出如何使用它。


4

您还可以使用Jackson,它在Maven中可用。您可以像这样使用它:

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

请注意,ObjectMapper有许多其他方法可用于读取/写入对象。
我建议使用它,因为它易于使用,支持注释,已经过生产验证,并且被许多组织使用,可能更重要的是,被集成在许多现有的框架(Spring、Jersey、RESTeasy、Camel等)中。
我不熟悉GSON,但有一个讨论涉及这两个库,您可以参考一下。

0

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

代码示例:

import com.github.underscore.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"

    }
}

0

确实,Java有很多JSON解析器。您可以查看json org link以了解可用于Java的不同JSON解析器。此外,this link为不同的JSON解析器提供了简单易懂的教程。

就个人而言,在不需要大量JSON解析的应用程序中,我使用simple json,对于主要基于JSON的应用程序,我使用gson


1
回答应该主要在stackoverflow上回答,而不仅仅是指向其他网站。 - David Hofmann
谢谢评论。我会在回答未来的问题时记住那个。 - anirudh

-2
如果你需要从哈希表中创建 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字符串值。 - David Hofmann

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接