JSONObject和Map<String, Object>的转换

打印 上一主题 下一主题

主题 674|帖子 674|积分 2022

一、前言

Java开辟中出参返回和入参传入更机动的方法是使用Map<String, Object>入参或出参,或者使用JSONObject。
1、好处,参数可变,对接口扩展性很友爱。
public ResponseData<WXModelDTO> getUserInfo(@RequestBody  Map<String, Object> map )
在获取参数的时候就可以通过
if (map.containsKey("code")) {
            code = map.get("code").toString();
        }
动态选择需要的参数
  1. public WXModelDTO getUserInfo(Map<String, Object> map) {
  2.                 String code = "";
  3.                 String wxCode = "";
  4.                 if (map.containsKey("code")) {
  5.                         code = map.get("code").toString();
  6.                 }
  7.                 if (map.containsKey("wxCode")) {
  8.                         wxCode = map.get("wxCode").toString();
  9.                 }
复制代码
如果使用对象实体去传参,就需要入参的字段都有,不方便扩展
二、JSONObject和Map<String, Object>的转换



在Java中,JSONObject 和 Map<String, Object> 之间的转换是常见的操作,特别是在处理JSON数据和Java对象时。虽然 JSONObject 是来自某个库(如org.json或com.alibaba.fastjson等)的类,而 Map<String, Object> 是Java尺度库中的一部分,但两者之间的转换可以通过简单的方法实现。
从 JSONObject 转换到 Map<String, Object>

对于不同的JSON处理库,转换的方法大概会有所不同,但基本原理相同。这里以 org.json 和 com.alibaba.fastjson 为例:
使用 org.json

  1. import org.json.JSONObject;  
  2.   
  3. import java.util.HashMap;  
  4. import java.util.Iterator;  
  5. import java.util.Map;  
  6.   
  7. public class JsonToMap {  
  8.     public static Map<String, Object> toMap(JSONObject obj) {  
  9.         Map<String, Object> map = new HashMap<>();  
  10.         Iterator<String> keysItr = obj.keys();  
  11.         while(keysItr.hasNext()) {  
  12.             String key = keysItr.next();  
  13.             map.put(key, obj.get(key));  
  14.         }  
  15.         return map;  
  16.     }  
  17.   
  18.     // 示例  
  19.     public static void main(String[] args) {  
  20.         JSONObject jsonObject = new JSONObject();  
  21.         jsonObject.put("name", "John Doe");  
  22.         jsonObject.put("age", 30);  
  23.   
  24.         Map<String, Object> map = toMap(jsonObject);  
  25.         System.out.println(map);  
  26.     }  
  27. }
复制代码
使用 com.alibaba.fastjson

Fastjson提供了更为便捷的方法:
  1. import com.alibaba.fastjson.JSONObject;  
  2.   
  3. import java.util.Map;  
  4.   
  5. public class FastJsonToMap {  
  6.     public static Map<String, Object> toMap(JSONObject jsonObject) {  
  7.         return jsonObject; // 因为fastjson的JSONObject实现了Map接口  
  8.     }  
  9.   
  10.     // 示例  
  11.     public static void main(String[] args) {  
  12.         JSONObject jsonObject = new JSONObject();  
  13.         jsonObject.put("name", "John Doe");  
  14.         jsonObject.put("age", 30);  
  15.   
  16.         Map<String, Object> map = toMap(jsonObject);  
  17.         System.out.println(map);  
  18.     }  
  19. }
复制代码
  1. import com.alibaba.fastjson.JSONObject;  
  2.   
  3. import java.util.Map;  
  4.   
  5. public class FastMapToJson {  
  6.     public static JSONObject toJson(Map<String, Object> map) {  
  7.         return JSONObject.parseObject(JSONObject.toJSONString(map));  
  8.     }  
  9.   
  10.     // 或者直接使用  
  11.     public static JSONObject toJsonSimple(Map<String, Object> map) {  
  12.         return (JSONObject) JSONObject.toJSON(map);  
  13.     }  
  14.   
  15.     // 示例  
  16.     public static void main(String[] args) {  
  17.         Map<String, Object> map = Map.of("name", "John Doe", "age", 30);  
  18.   
  19.         JSONObject jsonObject = toJsonSimple(map);  
  20.         System.out.println(jsonObject.toJSONString());  
  21.     }  
  22. }
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

熊熊出没

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表