有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

用Java将HashMap写入JSON

我是Java新手。我一直在从事一个使用Maven和Java1.7的项目。在我的项目中,我有一个HashMap。我想将这个HashMap输出到JSON。目前推荐的方法是什么

当我在谷歌上搜索时,我有很多选择(比如杰克逊)。然而,我不确定我应该用什么。另外,我想使用一个可以通过Maven访问的库

谢谢,


共 (5) 个答案

  1. # 1 楼答案

    的确,java有很多json解析器。看看the json org link,了解可用于java的不同json解析器。此外this link还为不同的json解析器提供了漂亮而简单的教程

    就我个人而言,我在没有太多json解析的应用程序中使用simple json,而在主要基于json的应用程序中使用gson,因此必须使用大量json

  2. # 2 楼答案

    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"
    
        }
    }
    
  3. # 3 楼答案

    如果您需要从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 + "\"";
        }
    }
    
  4. # 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. # 5 楼答案

    你也可以使用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不熟悉,但你可能想看看这两个方面的情况