JSon 문자열 과 자바 대상

JSON (JavaScript Object Notation) 은 경량급 데이터 교환 형식 이다.사람 이 읽 고 쓰기 쉽다.기계 적 으로 해석 하고 생 성 하기 도 쉽다.자 바스 크 립 트 Programming Language, Standard ECMA - 262 3rd Edition - December 1999 의 하위 집합 을 기반 으로 합 니 다.JSON 은 언어 에 완전히 독립 된 텍스트 형식 을 사용 하지만 C 언어 가족 과 유사 한 습관 (C, C++, C\#, Java, JavaScript, Perl, Python 등 포함) 도 사용 했다.이러한 특성 들 은 JSON 을 이상 적 인 데이터 교환 언어 로 만 들 었 다.
    JSON 문자열 과 자바 대상 간 의 상호 전환 을 실현 하려 면 방법 이 많 습 니 다!본인 도 프로젝트 상의 수요 로 인해 한때 이 몇 가지 방법 에 대해 연구 와 실험 을 한 적 이 있 습 니 다!지금 자신의 작은 경험 을 여러분 과 나 누고 있 습 니 다. 만약 잘못 이 있 으 면 지적 해 주 십시오!
  1. 제 이 슨 을 통 해lib 는 json 과 자바 대상 간 의 전환 을 실현 합 니 다. JSON - LIB 를 사용 하면 JAVA 대상 을 JSON 대상 으로 전환 하 는 데 필요 한 작업 을 크게 간소화 할 수 있 고 인공 작업 으로 JSON 대상 문자열 을 생 성 할 때 발생 하 는 번 거 로 움 과 오 작 동 을 피 할 수 있 습 니 다.
   주: json 을 사용 하려 면lib 는 다음 과 같은 jar 패키지 의 지원 이 필요 합 니 다:
json-lib-1.1-jdk15.jar  다운로드 주소:http://json-lib.sourceforge.net
        commons-collections-3.2.1.jar
        commons-lang-2.4.jar
      commons-logging-1.1.1.jar
      commons-beanutils-1.8.0.jar
    이상 comons 시 리 즈 는 tomcat/comon/lib 에서 찾 을 수 있 습 니 다.
        ezmorph-1.0.6.jar    다운로드 주소http://ezmorph.sourceforge.net
      morph - 1.0.1 다운로드 주소:http://morph.sourceforge.net
   이러한 jar 패키지 의 지원 이 있 으 면 평소에 json 처리 방법 에 대해 해당 하 는 종 류 를 찾 을 수 있 습 니 다.코드 예제 붙 이기:
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
public class JSONHelper {
                                    
     /**
      * 将JSONArray对象转换成Map-List集合
      * @param jsonArr
      * @return
      */
     public static Object JsonToList(JSONArray jsonArr){
         List<Object> jsonObjList = new ArrayList<Object> ();
         for(Object obj : jsonArr){
             if(obj instanceof JSONArray){
                 jsonObjList.add(JsonToList((JSONArray) obj));
             } else if(obj instanceof JSONObject){
                 jsonObjList.add(JsonToMap((JSONObject) obj));
             }else{
                 jsonObjList.add(obj);
             }
         }
         return jsonObjList;
     }
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
    /**
     *  将JSONObjec对象转换成Map-List集合
     * @param json
     * @return
     */
     public static Map<String, Object> JsonToMap(JSONObject json){
         Map<String,Object> columnValMap = new HashMap<String,Object>();
         Set<Object> jsonKeys = json.keySet();
         for (Object key : jsonKeys) {
             Object JsonValObj = json.get(key);
             if(JsonValObj instanceof JSONArray){
                columnValMap.put((String)key,  JsonToList((JSONArray) JsonValObj));
             }else if(key instanceof JSONObject){
                columnValMap.put((String)key,  JsonToMap((JSONObject) JsonValObj));
             }else{
                 columnValMap.put((String)key,JsonValObj);
             }
        }
         return columnValMap;
     }
                                                                                                                                                                  
     /**
      * 将json对象转换为map集合,通过此方法获取存放map集合键的list集合
      * @param obj
      * @return
      */
     public static List<Object> mapKeys(Object obj){
         List<Object> keysList = new ArrayList<Object>();
         Map<String,Object> columnValMap = new HashMap<String,Object>();
         String columnStr = "column";
         if(obj instanceof JSONArray){
             List<Map<String, Object>> jsonObjList = new ArrayList<Map<String, Object>> ();
             jsonObjList = (List<Map<String, Object>>) JsonToList((JSONArray) obj);
             columnValMap =(Map<String, Object>) (jsonObjList.get(0));
             //以上三句可优化为如下一句
             //columnValMap =(Map<String, Object>)(((List<Object>)JsonToList((JSONArray) obj)).get(0));
         }else if(obj instanceof JSONObject){
             columnValMap =JsonToMap((JSONObject) obj);
         }else{
             keysList.add(obj);
         }
         for(int i=0;i<columnValMap.keySet().size();i++){
             keysList.add(columnStr+(i+1));
         }
         System.out.println(keysList.size());
         return keysList;
     }
}

2. 구 글 의 Gson 을 사용 하여 제 이 슨 문자열 을 처리 합 니 다. 구 글 의 Gson 은 봉 인 된 자바 빈 을 대상 으로 처리 하 는 것 이 편리 하지만 봉 인 된 제 이 슨 문자열 에 대해 서 는 기 교 를 찾 아 처리 해 야 합 니 다.
      구 글 의 Gson 을 사용 하려 면 당연히 jar 가방 의 지원 이 필요 합 니 다. 이것 은 jar 가방 이 필요 합 니 다: Gson. jar
      다운로드 주소:http://code.google.com/p/google-gson/downloads/detail?name=google-gson-2.2.4-release.zip
       예시: js 를 통 해 얻 은 json 문자열 을 Map, List 집합 으로 변환 합 니 다. 코드 는 다음 과 같 습 니 다.
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.google.gson.Gson;
public class JSONHelper {
    private Gson gson = new Gson();
                                                                                                                                                                   
    /**
      * 将json对象转换为map集合,通过此方法获取存放map集合键的list集合
      * @param obj
      * @return
      */
    public static List<Object> mapKeys(Map<?,?> map){
         List<Object> keysList = new ArrayList<Object>();
         String columnStr="column";
         for(int i=0;i<map.keySet().size();i++){
             keysList.add(columnStr+(i+1));
         }
         System.out.println(keysList.size());
         return keysList;
    }
                                                                                                                                                           
    /**
     * 将传入的json字符串转换为元素为map集合的List集合
     * @param jsonArrStr
     * @return
     */
    public static List<Map<String, Object>> jsonObjList(String jsonArrStr) {
        List<Map<String, Object>> jsonObjList = new ArrayList<Map<String, Object>>();
        List<?> jsonList = Test.jsonToList(jsonArrStr);
        Gson gson = new Gson();
        for (Object object : jsonList) {
            String jsonStr = gson.toJson(object);
            Map<?, ?> json = Test.jsonToMap(jsonStr);
            jsonObjList.add((Map<String, Object>) json);
        }
        return jsonObjList;
    }
                                                                                                                                                                                                                                                                                                 
    /**
     * 将传入的json字符串解析为List集合
     * @param jsonStr
     * @return
     */
    public static List<?> jsonToList(String jsonStr) {
        List<?> ObjectList = null;
        Gson gson = new Gson();
        java.lang.reflect.Type type = new com.google.gson.reflect.TypeToken<List<?>>() {}.getType();
        ObjectList = gson.fromJson(jsonStr, type);
        return ObjectList;
    }
                                                                                                                                                                                                                                                                                                                                                                                                                                                 
    /**
     * 将传入的json字符串解析为Map集合
     * @param jsonStr
     * @return
     */
    public static Map<?, ?> jsonToMap(String jsonStr) {
        Map<?, ?> ObjectMap = null;
        Gson gson = new Gson();
        java.lang.reflect.Type type = new com.google.gson.reflect.TypeToken<Map<?,?>>() {}.getType();
        ObjectMap = gson.fromJson(jsonStr, type);
        return ObjectMap;
    }
}

 3. 가장 가 벼 운 org. json. jar 를 사용 하여 json 문자열 과 자바 대상 간 의 상호 전환 을 실현 합 니 다.
       필요 한 jar 패키지: org. json. jar
       다운로드 주소: www. json. org  또는 제3자:http://kiccp.sinaapp.com/store/info/111
       json 문자열 을 Map, List 집합 으로 변환 합 니 다. 코드 는 다음 과 같 습 니 다.
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
/**
 * 此类是处理json字符串的工具类
 *
 * @author xiaomeng
 * @since 2013-08-27
 *
 */
public class JSONHelper {
    /**
     * 将json字符串转换为List集合
     *
     * @param jsonArrStr
     * @return
     */
    public static List<Map<String, Object>> jsonObjList(String jsonArrStr) {
        List<Map<String, Object>> jsonList = new ArrayList<Map<String, Object>>();
        JSONArray jsonArr = null;
        try {
            jsonArr = new JSONArray(jsonArrStr);
            jsonList = (List<Map<String, Object>>)JSONHelper.jsonToList(jsonArr);
        } catch (JSONException e) {
            System.out.println("Json字符串转换异常!");
            e.printStackTrace();
        }
        return jsonList;
    }
    /**
     * 将json对象的键值存放在集合,映射table的column
     *
     * @param map
     * @return
     */
    public static List<String> jsonMapKeysList(Map<?, ?> map) {
        List<String> jsonjsonList = new ArrayList<String>();
        String columnStr = "column";
        for (int i = 0; i < map.keySet().size(); i++) {
            jsonjsonList.add(columnStr + (i + 1));
        }
        System.out.println(jsonjsonList.size());
        return jsonjsonList;
    }
    /**
     * 将传递近来的json数组转换为List集合
     *
     * @param jsonArr
     * @return
     * @throws JSONException
     */
    private static List<?> jsonToList(JSONArray jsonArr)
            throws JSONException {
        List<Object> jsonToMapList = new ArrayList<Object>();
        for (int i = 0; i < jsonArr.length(); i++) {
            Object object = jsonArr.get(i);
            if (object instanceof JSONArray) {
                jsonToMapList.add(JSONHelper.jsonToList((JSONArray) object));
            } else if (object instanceof JSONObject) {
                jsonToMapList.add(JSONHelper.jsonToMap((JSONObject) object));
            } else {
                jsonToMapList.add(object);
            }
        }
        return jsonToMapList;
    }
    /**
     * 将传递近来的json对象转换为Map集合
     *
     * @param jsonObj
     * @return
     * @throws JSONException
     */
    @SuppressWarnings("unchecked")
    private static Map<String, Object> jsonToMap(JSONObject jsonObj)
            throws JSONException {
        Map<String, Object> jsonMap = new HashMap<String, Object>();
        Iterator<String> jsonKeys = jsonObj.keys();
        while (jsonKeys.hasNext()) {
            String jsonKey = jsonKeys.next();
            Object jsonValObj = jsonObj.get(jsonKey);
            if (jsonValObj instanceof JSONArray) {
                jsonMap.put(jsonKey, JSONHelper.jsonToList((JSONArray) jsonValObj));
            } else if (jsonValObj instanceof JSONObject) {
                jsonMap.put(jsonKey, JSONHelper.jsonToMap((JSONObject) jsonValObj));
            } else {
                jsonMap.put(jsonKey, jsonValObj);
            }
        }
        return jsonMap;
    }
}

상기 세 가지 자주 사용 하 는 json 과 자바 대상 간 의 상호 전환 방법 은 각각 특징 이 있 습 니 다. 제 작은 경험 에 따라 현재 그 장단 점 을 다음 과 같이 요약 하여 참고 하 시기 바 랍 니 다!
    1.json_lib json 분석 프레임 워 크
       장점: 각종 복잡 한 제 이 슨 형식 과 제 이 슨 처리 에 대한 일반적인 수 요 를 모두 할 수 있다.
       단점: 지원 해 야 할 jar 파일 이 많 고 jar 패키지 버 전에 대해 서 는 잡다 한 문제 가 발생 할 수 있 습 니 다.
    2. 구 글 Gson 이 제 이 슨 에 대한 분석:
       장점: (1).구 글 의 Gson 은 자바 대상 과 제 이 슨 간 의 개발 프레임 워 크 를 처리 하기 위해 간단 하고 편리 하 게 포 장 된 자바 대상 과 제 이 슨 형식 텍스트 간 의 전환 을 할 수 있 으 며 자바 도구 류 집합 간 의 전환 도 편리 하 다.(2).상대 jsonlib 프레임 워 크 의 경우 Gson. jar 하나만 있 으 면 됩 니 다. jar 파일 의 수량 이 적 습 니 다.
       단점: 자바 대상 과 제 이 슨 간 의 전환 을 상대 적 으로 처리 하 는 경향 이 있 기 때문에 제 이 슨 문자열 과 집합 류 간 의 전환 만 간단하게 처리 하 는 데 약간의 과도 가 필요 합 니 다. 바로 반사 로 전환 하 는 자바 대상 유형 을 확인 하 는 것 입 니 다.
     3. org. json 프레임 워 크
       장점: 이 세 가지 중에서 가장 경량급, 구 글 Gson 과 마찬가지 로 필요 한 jar 파일 도 가장 적은 방법 이 며, json 문자열 에서 자바 집합 까지 의 노란색 전환 이 상대 적 으로 간편 하 다.
단점: Gson 에 비해 자바 대상 과 json 간 의 전환 이 힘 들 어 요.
종합 적 으로 말 하면 이 세 가지 해석 방법 은 각각 장단 점 이 있 고 구체 적 으로 자신의 수요 에 따라 선택 하여 사용 할 수 있다.

좋은 웹페이지 즐겨찾기