熊熊出没 发表于 2024-7-18 16:21:09

JSONObject和Map<String, Object>的转换

一、前言

Java开辟中出参返回和入参传入更机动的方法是使用Map<String, Object>入参或出参,或者使用JSONObject。
1、好处,参数可变,对接口扩展性很友爱。
public ResponseData<WXModelDTO> getUserInfo(@RequestBody  Map<String, Object> map )
在获取参数的时候就可以通过
if (map.containsKey("code")) {
            code = map.get("code").toString();
        }
动态选择需要的参数
public WXModelDTO getUserInfo(Map<String, Object> map) {
                String code = "";
                String wxCode = "";
                if (map.containsKey("code")) {
                        code = map.get("code").toString();
                }

                if (map.containsKey("wxCode")) {
                        wxCode = map.get("wxCode").toString();
                } 如果使用对象实体去传参,就需要入参的字段都有,不方便扩展
二、JSONObject和Map<String, Object>的转换

https://i-blog.csdnimg.cn/direct/4f66dee0d9b14783a42d7aeac7399b39.png

在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

import org.json.JSONObject;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

public class JsonToMap {
    public static Map<String, Object> toMap(JSONObject obj) {
      Map<String, Object> map = new HashMap<>();
      Iterator<String> keysItr = obj.keys();
      while(keysItr.hasNext()) {
            String key = keysItr.next();
            map.put(key, obj.get(key));
      }
      return map;
    }

    // 示例
    public static void main(String[] args) {
      JSONObject jsonObject = new JSONObject();
      jsonObject.put("name", "John Doe");
      jsonObject.put("age", 30);

      Map<String, Object> map = toMap(jsonObject);
      System.out.println(map);
    }
} 使用 com.alibaba.fastjson

Fastjson提供了更为便捷的方法:
import com.alibaba.fastjson.JSONObject;

import java.util.Map;

public class FastJsonToMap {
    public static Map<String, Object> toMap(JSONObject jsonObject) {
      return jsonObject; // 因为fastjson的JSONObject实现了Map接口
    }

    // 示例
    public static void main(String[] args) {
      JSONObject jsonObject = new JSONObject();
      jsonObject.put("name", "John Doe");
      jsonObject.put("age", 30);

      Map<String, Object> map = toMap(jsonObject);
      System.out.println(map);
    }
} import com.alibaba.fastjson.JSONObject;

import java.util.Map;

public class FastMapToJson {
    public static JSONObject toJson(Map<String, Object> map) {
      return JSONObject.parseObject(JSONObject.toJSONString(map));
    }

    // 或者直接使用
    public static JSONObject toJsonSimple(Map<String, Object> map) {
      return (JSONObject) JSONObject.toJSON(map);
    }

    // 示例
    public static void main(String[] args) {
      Map<String, Object> map = Map.of("name", "John Doe", "age", 30);

      JSONObject jsonObject = toJsonSimple(map);
      System.out.println(jsonObject.toJSONString());
    }
}

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: JSONObject和Map<String, Object>的转换