JSONObject 를 MAP으로 변환, JSONArray를 List로 변환하는 제일 간단한 방법

 

 

 

 

 

 

 

 

제일 단순한 방법을 gson 라이브러리를 사용하면 된다.  gson.fromJson 을 사용하면 되고, TypeToken에 추출하고자 하는 데이터형을 넣으면 된다.

gson 라이브러리 다운로드 : https://jar-download.com/artifacts/com.google.code.gson/gson/2.8.2/source-code

 

 

 

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonArray;
import com.google.gson.JsonObject;
import com.google.gson.reflect.TypeToken;

Gson gson = new Gson();
List<Map<String, Object>> myPushList = null;
String jsonArray = "[{'id':111,'title':'타이틀1','body':'내용1'},{'id':222,'title':'타이틀2','body':'내용2'}]";
// 또는 JsonArray jsonArray = myJsonObject.get("myList").getAsJsonArray();  // json object 에서 json array를 추출

myPushList = gson.fromJson(jsonArray, new TypeToken<List<Map<String, Object>>>() {}.getType());

System.out.println("@@@@@@@@@@@@@ myPushList = " + myPushList.toString() );

 

 

 

 

JSONObject 를 MAP으로 변환, JSONArray를 List로 변환 샘플 (오래된 방식, 비추천)

 

############################################################################

<< java 파일에서 json객체를 MAP으로 변환 >>

Map<String, Object> payDetail = new HashMap <String,Object>();

//JSONObject payInfoObject = null;

//JSONObject normalPayInfo = new JSONObject();

//normalPayInfo = payInfoObject.getJSONObject("NORMAL_PAYINFO");

payDetail = JSONUtils.jsonToMap(normalPayInfo);

 

############################################################################

<< java 파일에서 jsonArray를 List으로 변환 >>

import org.codehaus.jackson.JsonParseException;

import org.codehaus.jackson.map.JsonMappingException;

import org.codehaus.jackson.map.ObjectMapper;

import org.codehaus.jackson.type.TypeReference;

 

ObjectMapper mapper = new ObjectMapper();

List<Map<String, Object>> dtlList;

try {

dtlList = mapper.readValue(paramMap.get("DTL_LIST").toString(), new TypeReference<List<Map<String, Object>>>(){});

paramMap.put("DTL_LIST", dtlList);

} catch (JsonParseException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (JsonMappingException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

-----------------------------------------

ObjectMapper mapper = new ObjectMapper();

try {

if(paramMap.get("ORD_STS_CD_SET")!=null){

List<String> stsList = mapper.readValue(paramMap.get("ORD_STS_CD_SET").toString(), new TypeReference<List<String>>(){});

paramMap.put("stsList", stsList);

}else{

paramMap.put("stsList", null);

}

} catch (JsonParseException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (JsonMappingException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

 

 

############################################################################

<< JSONUtils.java >>

import java.util.ArrayList;

import java.util.HashMap;

import java.util.HashSet;

import java.util.Iterator;

import java.util.List;

import java.util.Map;

import java.util.Set;

 

import org.codehaus.jackson.JsonNode;

import org.codehaus.jackson.map.ObjectMapper;

import org.codehaus.jackson.node.ObjectNode;

import org.json.JSONArray;

import org.json.JSONException;

import org.json.JSONObject;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import org.springframework.util.StringUtils;

 

import com.hy.base.exception.BizRuntimeException;

import com.hy.common.Globals;

import com.hy.common.MessageKey;

 

/**

 * JSON 관련 Utility 메소드를 제공한다.  

 * @author 

 */

public abstract class JSONUtils {

 

protected final static Logger logger = LoggerFactory.getLogger(JSONUtils.class);

 

    /**

     * ObjectNode에서 key에 해당하는 data를 반환한다. 

     * @param node ObjectNode

     * @param key key

     * @return key에 해당하는 data

     */

public static String getStringForObjectNode(ObjectNode node, String key) {

if(node.has(key)) {

return node.get(key).asText();

}

return "";

}

 

/**

* JSON 문자열 데이터를 ObjectNode로 변환하여 반환한다. 

* @param jsonData JSON 문자열

* @return 변환된 ObjectNode

*/

public static ObjectNode getObjectNode(String jsonData) {

ObjectMapper om = new ObjectMapper();

        JsonNode rootNode = null;

        

        try {

rootNode = om.readValue(jsonData, JsonNode.class);

for(Iterator<JsonNode> i = rootNode.iterator(); i.hasNext();) {

JsonNode j = i.next();

if (j.isObject()) {

   ObjectNode obj = om.convertValue(j, ObjectNode.class);

   return obj;

}

}

} catch (Exception e) {

e.printStackTrace();

throw new RuntimeException(e);

}

        return null;

}

 

/**

* JSON 문자열 데이터를 String Array로 변환하여 반환한다. 

* @param data JSON 문자열

* @return 변환된 String Array 

*/

public static String[] getStringArray(String data) {

if(data == null) {

return null;

}

ObjectMapper om = new ObjectMapper();

        JsonNode rootNode = null;

        Set<String> set = new HashSet<String>();

        try {

rootNode = om.readValue(data, JsonNode.class);

for(Iterator<JsonNode> i = rootNode.iterator(); i.hasNext();) {

set.add(i.next().getTextValue()+"");

}

} catch (Exception e) {

e.printStackTrace();

throw new RuntimeException(e);

}

return set.toArray(new String[set.size()]);

}

 

/**

* menuId 목록을 담고 있는 문자열에서 중복된 문자열을 제거한 menuId 배열을 생성하여 반환한다. 

* @param menuPathIdData menuId 목록을 담고 있는 문자열 

* @return 중복된 문자열을 제거한 menuId 배열

*/

public static String[] getDistinctMenuIdArray(String menuPathIdData) {

if(menuPathIdData == null) {

return null;

}

ObjectMapper om = new ObjectMapper();

        JsonNode rootNode = null;

        Set<String> set = new HashSet<String>();

        try {

rootNode = om.readValue(menuPathIdData, JsonNode.class);

for(Iterator<JsonNode> i = rootNode.iterator(); i.hasNext();) {

String[] split = (i.next().getTextValue()+"").split("\\"+Globals.MENU_PATH_DELIMITER);

pupulateMenuId(set, split);

}

} catch (Exception e) {

e.printStackTrace();

throw BizRuntimeException.create(MessageKey.CMM_WARN_140);

}

return set.toArray(new String[set.size()]);

}

 

private static void pupulateMenuId(Set<String> set, String[] menuPathIdArray) {

if(menuPathIdArray == null) {

return;

}

for(String menuId : menuPathIdArray) {

String trimMenuId = StringUtils.trimAllWhitespace(menuId);

// if("0".equals(trimMenuId)) {

// continue;

// }

set.add(trimMenuId);

}

}

 

public static Map<String, Object> jsonToMap(JSONObject json) throws JSONException {

   Map<String, Object> retMap = new HashMap<String, Object>();

 

   if(json != JSONObject.NULL) {

       retMap = toMap(json);

   }

   return retMap;

}

 

public static Map<String, Object> toMap(JSONObject object) throws JSONException {

   Map<String, Object> map = new HashMap<String, Object>();

 

   Iterator<String> keysItr = object.keys();

   while(keysItr.hasNext()) {

       String key = keysItr.next();

       Object value = object.get(key);

 

       if(value instanceof JSONArray) {

           value = toList((JSONArray) value);

       }

 

       else if(value instanceof JSONObject) {

           value = toMap((JSONObject) value);

       }

       map.put(key, value);

   }

   return map;

}

 

public static List<Object> toList(JSONArray array) throws JSONException {

   List<Object> list = new ArrayList<Object>();

   for(int i = 0; i < array.length(); i++) {

       Object value = array.get(i);

       if(value instanceof JSONArray) {

           value = toList((JSONArray) value);

       }

 

       else if(value instanceof JSONObject) {

           value = toMap((JSONObject) value);

       }

       list.add(value);

   }

   return list;

}

 

 

}

 

#################### 다른 라이브러리 사용하는 방식 #######################

 

라이브러리 다운로드 위치 

com.fasterxml.jackson.core : https://jar-download.com/artifacts/com.fasterxml.jackson.core/jackson-core/2.9.7/source-code

com.fasterxml.jackson.databind :  http://www.java2s.com/Code/Jar/c/Downloadcomfasterxmljacksondatabindjar.htm

net.minidev.json : https://jar-download.com/artifacts/net.minidev/json-smart/2.2.1/source-code

 

 

출처 : https://zzznara2.tistory.com/687

 

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
 
import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;
 
import net.minidev.json.JSONArray;
import net.minidev.json.JSONObject;
 
/**
 *    일반문자열 유틸.
 *
 * @author someone
 * @version 1.0.0
 */
public class JsonUtil {
 
    /**
     * Map을 json으로 변환한다.
     *
     * @param map Map<String, Object>.
     * @return JSONObject.
     */
    public static JSONObject getJsonStringFromMap( Map<String, Object> map )
    {
        JSONObject jsonObject = new JSONObject();
        for( Map.Entry<String, Object> entry : map.entrySet() ) {
            String key = entry.getKey();
            Object value = entry.getValue();
            jsonObject.put(key, value);
        }
        
        return jsonObject;
    }
    
    /**
     * List<Map>을 jsonArray로 변환한다.
     *
     * @param list List<Map<String, Object>>.
     * @return JSONArray.
     */
    public static JSONArray getJsonArrayFromList( List<Map<String, Object>> list )
    {
        JSONArray jsonArray = new JSONArray();
        for( Map<String, Object> map : list ) {
            jsonArray.add( getJsonStringFromMap( map ) );
        }
        
        return jsonArray;
    }
    
    /**
     * List<Map>을 jsonString으로 변환한다.
     *
     * @param list List<Map<String, Object>>.
     * @return String.
     */
    public static String getJsonStringFromList( List<Map<String, Object>> list )
    {
        JSONArray jsonArray = getJsonArrayFromList( list );
        return jsonArray.toJSONString();
    }
 
    /**
     * JsonObject를 Map<String, String>으로 변환한다.
     *
     * @param jsonObj JSONObject.
     * @return Map<String, Object>.
     */
    @SuppressWarnings("unchecked")
    public static Map<String, Object> getMapFromJsonObject( JSONObject jsonObj )
    {
        Map<String, Object> map = null;
        
        try {
            
            map = new ObjectMapper().readValue(jsonObj.toJSONString(), Map.class) ;
            
        } catch (JsonParseException e) {
            e.printStackTrace();
        } catch (JsonMappingException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
 
        return map;
    }
 
    /**
     * JsonArray를 List<Map<String, String>>으로 변환한다.
     *
     * @param jsonArray JSONArray.
     * @return List<Map<String, Object>>.
     */
    public static List<Map<String, Object>> getListMapFromJsonArray( JSONArray jsonArray )
    {
        List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
        
        if( jsonArray != null )
        {
            int jsonSize = jsonArray.size();
            forint i = 0; i < jsonSize; i++ )
            {
                Map<String, Object> map = JsonUtil.getMapFromJsonObject( ( JSONObject ) jsonArray.get(i) );
                list.add( map );
            }
        }
        
        return list;
    }
}

 

+ Recent posts