Android JSON 데이터 구문 분석


이 섹션 소개:

우리가 서버와 상호 작용할 때 사용하는 가장 일반적인 데이터 전송 방법은 Json 문자열 형식입니다. 객체를 저장하기 위해 Json 문자열로 작성하여 저장할 수도 있습니다! Json 구문 분석 Gson, Fastjson 또는 Jackson을 사용하고 있는지 모르겠습니다. 잠깐, 하지만 이 섹션에서는 이러한 타사 구문 분석 라이브러리를 사용하지 않고 Android 자체 Json 파서를 사용하여 Json을 구문 분석합니다! 좋아요, 이제 이 섹션을 시작하겠습니다!


1.Json의 개념과 XML과의 비교

1) Json이란?

답변: XML과 같은 경량 데이터 교환 형식인 JavaScript Object Natation 클라이언트-서버 상호작용을 위해 널리 채택된 솔루션입니다! 가독성이 좋고 빠르게 쓰기 쉬운 것이 특징입니다.

2) Json과 XML의 비교:

  • JSON과 XML의 데이터 가독성은 기본적으로 동일합니다.
  • JSON과 XML은 구문 분석 방법도 풍부합니다.
  • XML에 비해 JSON은 데이터가 적습니다. size
  • JSON과 JavaScript 간의 상호 작용이 더 편리합니다.
  • JSON은 XML보다 데이터 설명이 적습니다
  • JSON은 XML보다 훨씬 빠릅니다

PS: 위 내용은 Baidu에서 가져온 것입니다~ Json의 장점에 대해 간략하게 이야기해 보겠습니다. 크기가 작고 트래픽이 절약되지만 XML만큼 직관적이고 읽기 쉽지는 않습니다. 조금 더 나빠요!

3) Json 형식 사양:

프로토콜과 마찬가지로 일련의 사양이 있어야 합니다. 결국 양쪽 모두 Json 문자열을 통해 데이터를 전송합니다. 데이터는 이름에 있습니다. /값 쌍 쉼표로 구분된 데이터 중괄호는 객체 저장 대괄호는 배열 저장 ; Json 데이터의 쓰기 형식: 이름/값 쌍 예: "person": "coder-pig"예: 간단한 Json 문자열:

[
    { "id":"1","name":"基神","age":"18" },
    { "id":"2","name":"B神","age":"18"  },
    { "id":"3","name":"曹神","age":"18" }
]

Json을 구문 분석하는 것 외에도 splice할 수도 있습니다. 물론 Json 자체입니다. Json 문자열의 철자를 직접 입력했는데 그것이 올바른지 아닌지 알 수 없다면, Baidu에서 다음과 같은 확인 도구를 찾을 수 있습니다.
http://www.php.cn/jsontool
Json 문자열을 붙여넣고 확인하세요!

2. Android에서 제공하는 Json 구문 분석 클래스

이러한 API는 모두 org.json 패키지에 존재하며, 우리가 사용하는 클래스는 다음과 같습니다.

  • JSONObject: Json 문자열과 Java 객체
  • JSONArray 간의 변환을 완료할 수 있는 Json 객체: Json 배열은 Json 문자열과 Java 컬렉션 또는 object
  • JSONStringer 간의 변환을 완료할 수 있습니다. JSON 텍스트 구성 클래스인 이 클래스는 JSON 텍스트를 빠르고 편리하게 생성하는 데 도움이 됩니다. 각 JSONStringer 엔터티는 하나의 JSON 텍스트만 생성할 수 있습니다
  • JSONTokener: Json 구문 분석 클래스
  • JSONException: Json 예외

3 코드 예: Json 문자열 구문 분석:

PS: 여기서는 그럴 필요가 없습니다. 다른 서블릿을 작성하거나 웹사이트를 요청하세요. Json을 문자열로 작성하여 구문 분석하고 시뮬레이션하세요!

1) 간단한 Json 문자열 구문 분석 예:

위의 간단한 Json을 구문 분석합니다. 먼저 POJO 클래스를 작성해 보겠습니다.

Person.java:

/**
 * Created by Jay on 2015/9/8 0008.
 */
public class Person {
    private String id;
    private String name;
    private String age;
    public void setId(String id){
        this.id = id;
    }
    public String getId(){
        return this.id;
    }
    public void setName(String name){
        this.name = name;
    }
    public String getName(){
        return this.name;
    }
    public void setAge(String age){
        this.age = age;
    }
    public String getAge(){
        return this.age;
    }
    @Override
    public String toString() {
        return this.name + "~年方:" + this.age;
    }
}

위의 Json 문자열을 구문 분석하는 메서드를 작성합니다.

private void parseEasyJson(String json){
    persons = new ArrayList();
    try{
        JSONArray jsonArray = new JSONArray(json);
        for(int i = 0;i < jsonArray.length();i++){
            JSONObject jsonObject = (JSONObject) jsonArray.get(i);
            Person person = new Person();
            person.setId(i+"");
            person.setName(jsonObject.getString("name"));
            person.setAge(jsonObject.getString("age"));
            persons.add(person);
        }
    }catch (Exception e){e.printStackTrace();}
}

렌더링 실행하기 :

1.png

헤헤 아주 간단하죠? 다음은 좀 더 복잡한 것을 찾아볼까요?


2) 복잡한 Json 문자열 구문 분석 예:

이런 Json 문자열이라면 어떨까요?

2.png

하하, 그러면 단계별로 데이터를 공제해야 합니다.

파싱 코드는 다음과 같습니다:

private void parseDiffJson(String json) {
    try {
        JSONObject jsonObject1 = new JSONObject(json);
        Log.e("Json", json);
        JSONArray jsonArray = jsonObject1.getJSONArray("ch");
        for (int i = 0; i < jsonArray.length(); i++) {
            JSONObject jsonObject = (JSONObject) jsonArray.get(i);
            //取出name
            String sname = jsonObject.getString("names");
            JSONArray jarray1 = jsonObject.getJSONArray("data");
            JSONArray jarray2 = jsonObject.getJSONArray("times");
            Log.e("Json", sname);
            Log.e("Json", jarray1.toString());
            Log.e("Json", jarray2.toString());
        }
    } catch (Exception e) {
        e.printStackTrace();
    }

}

인쇄된 로그를 보세요:

3.png

물론 또 있습니다. 레이어, 관심이 있으시면 직접 해보세요...


이 섹션 요약:

좋아, Android에서 제공하는 Json 구문 분석 클래스를 사용하면 천천히 구문 분석할 수도 있습니다. 프로세스 반면에 JSON을 직접 접합할 수도 있습니다. 시간 제약으로 인해 여기서는 천천히 접합하겠습니다. 하하. 물론 고급 부분을 수행하겠습니다. 타사 Json 구문 분석 라이브러리를 배우고 나면 훨씬 쉽습니다. ~알겠습니다. 이 섹션은 여기까지입니다. 감사합니다~