如何在Java中将hashmap转换为JSON对象

moh*_*han 251 java json

如何在Java中将hashmap转换或转换为JSON对象,并再次将JSON对象转换为JSON字符串?

Ank*_*kur 396

您可以使用:

new JSONObject(map);
Run Code Online (Sandbox Code Playgroud)

注意:这只适用于Map<String, String>!

您可以从其文档http://stleary.github.io/JSON-java/index.html获取其他功能

  • 这仅适用于String,String映射,而不适用于复杂的String,Object. (78认同)
  • @slott适用于旧版本.像kitkat这样的新版本可以处理更复杂的对象,例如HashMap <String,Object>(),其中包含HashMap <String,Object>()作为Object.所以我推荐Gson. (7认同)
  • 转换为 JSON 字符串而不是 JSON 对象:`new ObjectMapper().writeValueAsString(map);` (4认同)
  • 你把`Map`放到了'JSONObject`中,但你如何从jsonObject获取这个地图? (2认同)

小智 156

Gson还可用于序列化任意复杂的对象.

以下是您使用它的方式:

Gson gson = new Gson(); 
String json = gson.toJson(myObject); 
Run Code Online (Sandbox Code Playgroud)

Gson将自动将集合转换为JSON数组.Gson可以序列化私有字段并自动忽略瞬态字段.

  • 注意:这不会保留具有空值的键。 (2认同)

Moh*_*ain 55

使用json的示例

Map<String, Object> data = new HashMap<String, Object>();
    data.put( "name", "Mars" );
    data.put( "age", 32 );
    data.put( "city", "NY" );
    JSONObject json = new JSONObject();
    json.putAll( data );
    System.out.printf( "JSON: %s", json.toString(2) );
Run Code Online (Sandbox Code Playgroud)

输出::

JSON: {
  "age": 32,
  "name": "Mars",
  "city": "NY"
}
Run Code Online (Sandbox Code Playgroud)

您也可以尝试使用Google的GSON.Google的GSON是可用于将Java对象转换为JSON表示的最佳库.

http://code.google.com/p/google-gson/

  • 没有这样的方法:( new org.json.JSONObject()).putAll(); (14认同)
  • 哪个JSONObject类是这个? (11认同)
  • 很抱歉挖掘但````在`json.toString(`2`)中做了什么 (2认同)
  • public String toString(int radix).toString(2) 用于字符串表示。更多 http://stackoverflow.com/questions/3615721/how-to-use-the-tostring-method-in-java (2认同)

Ank*_*jan 44

您可以转换MapJSON使用Jackson如下:

Map<String,Object> map = new HashMap<>();
//You can convert any Object.
String[] value1 = new String[] { "value11", "value12", "value13" };
String[] value2 = new String[] { "value21", "value22", "value23" };
map.put("key1", value1);
map.put("key2", value2);
map.put("key3","string1");
map.put("key4","string2");

String json = new ObjectMapper().writeValueAsString(map);
System.out.println(json);
Run Code Online (Sandbox Code Playgroud)

Maven依赖关系Jackson:

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-core</artifactId>
    <version>2.5.3</version>
    <scope>compile</scope>
</dependency>

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.5.3</version>
    <scope>compile</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)

如果您使用的是JSONObject库,则可以将map转换JSON为如下:

Map<String, Object> map = new HashMap<>();
// Convert a map having list of values.
String[] value1 = new String[] { "value11", "value12", "value13" };
String[] value2 = new String[] { "value21", "value22", "value23" };
map.put("key1", value1);
map.put("key2", value2);

JSONObject json = new JSONObject(map);
System.out.println(json);
Run Code Online (Sandbox Code Playgroud)

Maven依赖关系JSONObject:

<dependency>
    <groupId>org.json</groupId>
    <artifactId>json</artifactId>
    <version>20140107</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

希望这会有所帮助.快乐的编码.

  • @AnkurMahajan +1 给出正确的依赖答案:) (3认同)

Val*_*kov 7

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

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

public class Main {

    public static void main(String[] args) {

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

        System.out.println(U.toJson(map));
        // {
        //    "1": "a",
        //    "2": "b"
        // }
    }
}
Run Code Online (Sandbox Code Playgroud)


Cha*_*ana 7

我们使用Gson。

Gson gson = new Gson();
Type gsonType = new TypeToken<HashMap>(){}.getType();
String gsonString = gson.toJson(elements,gsonType);
Run Code Online (Sandbox Code Playgroud)


Una*_*ahD 6

您只需枚举映射并将键值对添加到JSONObject即可

方法 :

private JSONObject getJsonFromMap(Map<String, Object> map) throws JSONException {
    JSONObject jsonData = new JSONObject();
    for (String key : map.keySet()) {
        Object value = map.get(key);
        if (value instanceof Map<?, ?>) {
            value = getJsonFromMap((Map<String, Object>) value);
        }
        jsonData.put(key, value);
    }
    return jsonData;
}
Run Code Online (Sandbox Code Playgroud)


jol*_*ier 5

这通常是Json库的工作,您不应该自己尝试做。所有json库都应实现您的要求,并且您可以在页面底部的json.org上找到Java Json库的列表。


Who*_*ome 5

晚会,但这是我的GSON特别编写器序列化hashmap.我必须将键值对的映射写为json字符串属性,期望一个特定的是整数类型.我不想为这个简单的用例创建自定义JavaBean包装器.

GSON JsonWriter类是易于使用的序列化程序类,包含很少的强类型writer.value()函数.

// write Map as JSON document to http servlet response
Map<String,String> sd = DAO.getSD(123);
res.setContentType("application/json; charset=UTF-8");
res.setCharacterEncoding("UTF-8");
JsonWriter writer = new JsonWriter(new OutputStreamWriter(res.getOutputStream(), "UTF-8"));
writer.beginObject();
for(String key : sd.keySet()) {
    String val = sd.get(key);
    writer.name(key);
    if (key.equals("UniqueID") && val!=null)
        writer.value(Long.parseLong(val));
    else
        writer.value(val);
}
writer.endObject();
writer.close();
Run Code Online (Sandbox Code Playgroud)

如果不需要任何自定义类型,我可以使用toJson()函数.gson-2.2.4.jar库不到190KB,没有任何残酷的依赖.易于在任何自定义servlet应用程序或独立应用程序上使用,无需大型框架集成.

Gson gson = new Gson(); 
String json = gson.toJson(myMap); 
Run Code Online (Sandbox Code Playgroud)


Vla*_*lav 5

如果您需要在代码中使用它。

Gson gsone = new Gson();
JsonObject res = gsone.toJsonTree(sqlParams).getAsJsonObject();
Run Code Online (Sandbox Code Playgroud)


And*_*rul 5

就我而言,我不需要任何依赖。使用Java 8,您可以很简单地将JSON作为字符串获取:

Map<String, Object> map = new HashMap<>();
map.put("key", "value");
map.put("key2", "value2");
String json = "{"+map.entrySet().stream()
    .map(e -> "\""+ e.getKey() + "\"" + ":\"" + String.valueOf(e.getValue()) + "\"")
    .collect(Collectors.joining(", "))+"}";
Run Code Online (Sandbox Code Playgroud)

  • 你不是在逃避......如果键或值包含`"`,这会中断 (5认同)

Ale*_*ecs 5

这是我使用 GSON 的单行解决方案:

myObject = new Gson().fromJson(new Gson().toJson(myHashMap), MyClass.class);
Run Code Online (Sandbox Code Playgroud)


sha*_*608 5

对于那些使用 的用户org.json.simple.JSONObject,您可以将地图转换为 Json 字符串并解析它以获取JSONObject.

JSONObject object = (JSONObject) new JSONParser().parse(JSONObject.toJSONString(map));
Run Code Online (Sandbox Code Playgroud)


IMJ*_*MJS 5

我找到了另一种方法来处理它。

Map obj=new HashMap();    
obj.put("name","sonoo");    
obj.put("age",new Integer(27));    
obj.put("salary",new Double(600000));   
String jsonText = JSONValue.toJSONString(obj);  
System.out.print(jsonText);
Run Code Online (Sandbox Code Playgroud)


Raf*_*den 5

如果你真的不需要 HashMap 那么你可以这样做:

String jsonString = new JSONObject() {{
  put("firstName", user.firstName);
  put("lastName", user.lastName);
}}.toString();
Run Code Online (Sandbox Code Playgroud)

输出:

{
  "firstName": "John",
  "lastName": "Doe"
}
Run Code Online (Sandbox Code Playgroud)


Ric*_*oCh 5

此解决方案适用于复杂的 JSON:

public Object toJSON(Object object) throws JSONException {
    if (object instanceof HashMap) {
        JSONObject json = new JSONObject();
        HashMap map = (HashMap) object;
        for (Object key : map.keySet()) {
            json.put(key.toString(), toJSON(map.get(key)));
        }
        return json;
    } else if (object instanceof Iterable) {
        JSONArray json = new JSONArray();
        for (Object value : ((Iterable) object)) {
            json.put(toJSON(value));
        }
        return json;
    }
    else {
        return object;
    }
}
Run Code Online (Sandbox Code Playgroud)


小智 5

迟到总比不到好。如果您想要序列化列表,我使用GSON将 HashMap 列表转换为字符串。

List<HashMap<String, String>> list = new ArrayList<>();
HashMap<String,String> hashMap = new HashMap<>();
hashMap.add("key", "value");
hashMap.add("key", "value");
hashMap.add("key", "value");
list.add(hashMap);

String json = new Gson().toJson(list);
Run Code Online (Sandbox Code Playgroud)

json产生[{"key":"value","key":"value","key":"value"}]

  • 这不能回答问题。它正在生成 JSON 数组,而不是 JSON 对象。其他人已经向我们展示了如何使用“Gson”从哈希图创建 JSON 对象。 (2认同)
  • @KellyBudol 好或坏,你的答案就是我要找的。谢谢男人 (2认同)