如何在Java中转换或转换哈希图到JSON对象,并再次将JSON对象转换为JSON字符串?
当前回答
迟到的派对,但这里是我的GSON adhoc作家序列化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();
如果不需要任何自定义类型,我可以只使用toJson()函数。jar库只有不到190KB,没有任何残酷的依赖关系。易于在任何自定义servlet应用程序或独立应用程序上使用,无需大型框架集成。
Gson gson = new Gson();
String json = gson.toJson(myMap);
其他回答
你可以使用:
new JSONObject(map);
其他函数可以从它的文档中获得 http://stleary.github.io/JSON-java/index.html
这通常是Json库的工作,你不应该尝试自己做。所有json库都应该实现您所要求的内容,而且您可以做到 在页面底部的json.org上找到Java Json库的列表。
我找到了另一种处理方法。
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);
希望这能有所帮助。
谢谢。
你可以使用Gson。 这个库提供了将Java对象转换为JSON对象的简单方法,反之亦然。
例子:
GsonBuilder gb = new GsonBuilder();
Gson gson = gb.serializeNulls().create();
gson.toJson(object);
当需要设置默认选项以外的配置选项时,可以使用GsonBuilder。在上面的例子中,转换过程也将序列化object中的null属性。
但是,这种方法只适用于非泛型类型。对于泛型类型,你需要使用toJson(object, Type)。
更多关于Gson的信息请点击这里。
记住,对象必须实现Serializable接口。
就我而言,我不想要任何依赖。使用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(", "))+"}";
推荐文章
- 在流中使用Java 8 foreach循环移动到下一项
- 访问限制:'Application'类型不是API(必需库rt.jar的限制)
- 查询JSON类型内的数组元素
- 用Java计算两个日期之间的天数
- 如何配置slf4j-simple
- 在Jar文件中运行类
- 带参数的可运行?
- 我如何得到一个字符串的前n个字符而不检查大小或出界?
- 我可以在Java中设置enum起始值吗?
- Java中的回调函数
- c#和Java中的泛型有什么不同?和模板在c++ ?
- 在Java中,流相对于循环的优势是什么?
- Jersey在未找到InjectionManagerFactory时停止工作
- 在Java流是peek真的只是调试?
- Recyclerview不调用onCreateViewHolder