How to convert hashmap to JSON object in Java

前端 未结 29 2006
谎友^
谎友^ 2020-11-22 11:20

How to convert or cast hashmap to JSON object in Java, and again convert JSON object to JSON string?

相关标签:
29条回答
  • 2020-11-22 11:48

    Better be late than never. I used GSON to convert list of HashMap to string if in case you want to have a serialized list.

    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);
    

    This json produces [{"key":"value","key":"value","key":"value"}]

    0 讨论(0)
  • 2020-11-22 11:49

    You can use XStream - it is really handy. See the examples here

    package com.thoughtworks.xstream.json.test;
    
    import com.thoughtworks.xstream.XStream;
    import com.thoughtworks.xstream.io.json.JettisonMappedXmlDriver;
    
    public class WriteTest {
    
        public static void main(String[] args) {
    
          HashMap<String,String> map = new HashMap<String,String>();
          map.add("1", "a");
          map.add("2", "b");
          XStream xstream = new XStream(new JettisonMappedXmlDriver());
    
          System.out.println(xstream.toXML(map));       
    
        }
    
    }
    
    0 讨论(0)
  • 2020-11-22 11:50

    we use Gson.

    Gson gson = new Gson();
    Type gsonType = new TypeToken<HashMap>(){}.getType();
    String gsonString = gson.toJson(elements,gsonType);
    
    0 讨论(0)
  • 2020-11-22 11:51

    Underscore-java library can convert hash map or array list to json and vice verse.

    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"
            // }
        }
    }
    
    0 讨论(0)
  • 2020-11-22 11:55

    I faced a similar problem when deserializing the Response from custom commands in selenium. The response was json, but selenium internally translates that into a java.util.HashMap[String, Object]

    If you are familiar with scala and use the play-API for JSON, you might benefit from this:

    import play.api.libs.json.{JsValue, Json}
    import scala.collection.JavaConversions.mapAsScalaMap
    
    
    object JsonParser {
    
      def parse(map: Map[String, Any]): JsValue = {
        val values = for((key, value) <- map) yield {
          value match {
            case m: java.util.Map[String, _] @unchecked => Json.obj(key -> parse(m.toMap))
            case m: Map[String, _] @unchecked => Json.obj(key -> parse(m))
            case int: Int => Json.obj(key -> int)
            case str: String => Json.obj(key -> str)
            case bool: Boolean => Json.obj(key -> bool)
          }
        }
    
        values.foldLeft(Json.obj())((temp, obj) => {
          temp.deepMerge(obj)
        })
      }
    }
    

    Small code description:

    The code recursively traverses through the HashMap until basic types (String, Integer, Boolean) are found. These basic types can be directly wrapped into a JsObject. When the recursion is unfolded, the deepmerge concatenates the created objects.

    '@unchecked' takes care of type erasure warnings.

    0 讨论(0)
  • 2020-11-22 11:56

    You can just enumerate the map and add the key-value pairs to the JSONObject

    Method :

    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;
    }
    
    0 讨论(0)
提交回复
热议问题