안드로이드 해석 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은 성능이 비교적 약하지만 안정적이다.