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();
for( int i = 0; i < jsonSize; i++ )
{
Map<String, Object> map = JsonUtil.getMapFromJsonObject( ( JSONObject ) jsonArray.get(i) );
list.add( map );
}
}
return list;
}
}
|
'자바 일반' 카테고리의 다른 글
정규표현식 (javascript, java) split 사용법 (0) | 2020.11.04 |
---|---|
JSON 데이터 정렬하여 보기, JSON Tree 구조 보기 (0) | 2020.08.07 |
쿠키 저장 및 조회 from JAVA (1) | 2019.05.28 |
Spring 예제 사이트, 게시판 만들기 등 (0) | 2015.11.04 |
xml 범용 파싱 (리스트) (0) | 2015.03.09 |