안드로이드 해석 JSON 데이터의 몇 가지 방식 비교

4352 단어 경험 총결산
제이슨 소개
Json(JavaScript Object Natotion)은 읽기 쉽고 빠르게 작성할 수 있는 경량급 데이터 교환 형식으로 데이터 전송에 주로 사용된다.Json은 Xml를 대체하는 데이터 구조로 xml보다 작아서 데이터 전송 데이터와 차지하는 대역폭을 감소시킨다.
Json 문법
개체를 나타냅니다.
[] 배열을 나타냅니다.
""은(는) 값 또는 속성을 나타냅니다.
: 앞쪽이 키이고 뒤쪽이value임을 나타냅니다.value는 문자열, 숫자 또는 다른 그룹이나 대상이 될 수 있습니다
예를 들어 {"name":"tom"}은 속성 이름이name이고 값은tom임을 나타낸다.[{"name": "tom"}, {"name": "jack"}] 이것은 두 개의 대상을 나타내는 수조로 {"name": [tom","jack"]}과 같다. 이것은name 수조를 가진 대상이다.
기존 방식(org.json 패키지 사용)
다음은 json 문자열을 생성하고 json 문자열을 해석하는 방법을 보여 줍니다.
 
    /**
     *       json  
     * @param user
     * @return
     */
    public static String buildJson(User user) {
        try {
            JSONObject juser = new JSONObject();
            juser.put("name", user.getName());
            juser.put("pwd",user.getPwd());
            return juser.toString();
        }catch (JSONException e) {
            Log.e("JSON_ERROR",e.getMessage());
        }
        return null;
    }

    /**
     *  json       
     * @param json
     * @return
     */
    public static User getUser(String json) {
        JSONTokener jsonTokener = new JSONTokener(json);
        try {
            JSONObject user = (JSONObject) jsonTokener.nextValue();
            if (user != null) {
                String name = user.getString("name");
                String pwd = user.getString("pwd");
                return new User(name,pwd);
            }
        }catch (JSONException e){
            Log.e("JSON_ERROR",e.getMessage());
        }
        return null;
    }

    /**
     *  json     User  
     * @param key
     * @param json
     * @return
     */
    public static List getUsers(String key,String json) {
        List list = new ArrayList();
        try {
            JSONObject jsonObject = new JSONObject(json);
            if (jsonObject != null) {
                JSONArray array = jsonObject.getJSONArray(key);
                if (array != null && array.length() > 0 ) {
                    for (int i = 0; i < array.length(); i ++) {
                        JSONObject userJson = array.getJSONObject(i);
                        User  user = new User();
                        user.setName(userJson.getString("name"));
                        user.setPwd(userJson.getString("pwd"));
                        list.add(user);
                    }
                }
                return list;
            }
        }catch (JSONException e) {
            Log.e("JSON_ERROR",e.getMessage());
        }
        return null;
    }

org.json 패키지는 JSONarray, JSONObject, JSONstringer, JSONtokener, JSONException 등 5개 클래스를 제공했다.
JSONException 예외 클래스
JSONstringer 질서정연한 구성
JSONObject 무질서 구조
JSONarray 배열 객체
JSONstringer가 전송한 키 값 쌍은 질서정연하고 JSONObject가 전송한 키 값 쌍은 질서가 없다. 일반적인 상황에서 JSONObject를 사용하면 되지만 일부 끼워 넣은 Json과 일부 JSONarray는 키가value만 없는 경우 JSONstringer를 사용한다.
라이브러리 Gson 사용
    /**
     *   Gson        String
     * @param user
     * @return
     */
    public static String getJson(User user) {
        Gson gson = new Gson();
        return gson.toJson(user);
    }

    /**
     *   Gson String     
     * @param json
     * @return
     */
    public static User getUser(String json) {
        Gson gson = new Gson();
        try {
            return gson.fromJson(json,User.class);
        }catch (Exception e) {
            Log.e("TAG",e.getMessage());
        }
        return null;
    }

    /**
     *   Gson String       
     * @param json
     * @return
     */
    public static List getUsers(String json) {
        Gson gson = new Gson();
        try {
           return gson.fromJson(json, new TypeToken>(){}.getType());
        }catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

Gson과 비슷한 json 라이브러리에서 자주 사용하는 것은 Gson 외에 잭슨과 FastJson이다. 이 세 가지 개성 에너지의 비교에 대해 인터넷에서 의견이 분분하다. 물론 이것은 그들이 실현한 코드와 매우 큰 관계가 있지만 개인 테스트를 한 결과 잭슨과 FastJson의 서열화와 반서열화 성능이 비슷하다는 것을 발견했다.Gson은 성능이 비교적 약하지만 안정적이다.

좋은 웹페이지 즐겨찾기