Simple JSON 개발 가이드

29296 단어 simple

Simple JSON 은 Google 이 개발 한 Java JSON 해석 프레임 워 크 로 아파 치 프로 토 콜 을 기반 으로 한다.
 
json - simple 홈 페이지: http://code.google.com/p/json-simple/
 
다운로드 한 파일 은: jsonsimple.jar
 
예 1: 매우 편리 한 방식 으로 JSONvalue 를 사용한다.
System.out.println("=======decode=======");
        
		  String s="[0,{\"1\":{\"2\":{\"3\":{\"4\":[5,{\"6\":7}]}}}}]";
		  Object obj=JSONValue.parse(s);
		  JSONArray array=(JSONArray)obj;
		  System.out.println("======the 2nd element of array======");
		  System.out.println(array.get(1));
		  System.out.println();
		                
		  JSONObject obj2=(JSONObject)array.get(1);
		  System.out.println("======field \"1\"==========");
		  System.out.println(obj2.get("1"));    

		                
		  s="{}";
		  obj=JSONValue.parse(s);
		  System.out.println(obj);
		                
		  s="[5,]";
		  obj=JSONValue.parse(s);
		  System.out.println(obj);
		                
		  s="[5,,2]";
		  obj=JSONValue.parse(s);
		  System.out.println(obj);

 
JSONobject 는 Map 을 계승 하 는 것 이 고 JSONarray 는 List 를 계승 하 는 것 이기 때문에 Map 과 List 의 표준 방식 으로 JSONobject 와 JSONarray 를 사용 할 수 있 습 니 다.
 
JSONBalue 는 배열 을 사용 할 수도 있 고 대상 을 사용 할 수도 있다.
 
 
예 2: 빠 른 방식 으로 JSONPARSER 사용
 
JSONParser parser=new JSONParser();

  System.out.println("=======decode=======");
                
  String s="[0,{\"1\":{\"2\":{\"3\":{\"4\":[5,{\"6\":7}]}}}}]";
  Object obj=parser.parse(s);
  JSONArray array=(JSONArray)obj;
  System.out.println("======the 2nd element of array======");
  System.out.println(array.get(1));
  System.out.println();
                
  JSONObject obj2=(JSONObject)array.get(1);
  System.out.println("======field \"1\"==========");
  System.out.println(obj2.get("1"));    

                
  s="{}";
  obj=parser.parse(s);
  System.out.println(obj);
                
  s="[5,]";
  obj=parser.parse(s);
  System.out.println(obj);
                
  s="[5,,2]";
  obj=parser.parse(s);
  System.out.println(obj);

 JSONPARSER 를 사용 하려 면 이상 을 포착 해 야 합 니 다.
 
예 3: 이상 처리
   
String jsonText = "[[null, 123.45, \"a\\tb c\"]}, true";
  JSONParser parser = new JSONParser();
                
  try{
    parser.parse(jsonText);
  }
  catch(ParseException pe){
    System.out.println("position: " + pe.getPosition());
    System.out.println(pe);
  }

 
실행 결과:
position:25   Unexpected token RIGHT BRACE(}) at position 25.

 
예 4: 용기 공장
 
용기 공장 을 만 들 기 위해 사용 ContainerFactory 클래스 를 사용 합 니 다.
 
String jsonText = "{\"first\": 123, \"second\": [4, 5, 6], \"third\": 789}";
  JSONParser parser = new JSONParser();
  ContainerFactory containerFactory = new ContainerFactory(){
    public List creatArrayContainer() {
      return new LinkedList();
    }

    public Map createObjectContainer() {
      return new LinkedHashMap();
    }
                        
  };
                
  try{
    Map json = (Map)parser.parse(jsonText, containerFactory);
    Iterator iter = json.entrySet().iterator();
    System.out.println("==iterate result==");
    while(iter.hasNext()){
      Map.Entry entry = (Map.Entry)iter.next();
      System.out.println(entry.getKey() + "=>" + entry.getValue());
    }
                        
    System.out.println("==toJSONString()==");
    System.out.println(JSONValue.toJSONString(json));
  }
  catch(ParseException pe){
    System.out.println(pe);
  }

 결 과 는 다음 과 같다.
 
 
==iterate result==   first=>123   second=>[4,5,6]   third=>789   ==toJSONString()==   {"first":123,"second":[4,5,6],"third":789}

 
 
 용기 공장 을 사용 하지 않 으 면 Simple - JSON 은 기본적으로 JSONobject 와 JSONarray 를 사용 합 니 다.
 예 5: 멈 출 수 있 는 SAX 식 콘 텐 츠 처리
Simple JSON 은 텍스트 흐름 을 처리 하기 위해 간단 하고 멈 출 수 있 는 SAX 방식 의 내용 처리 방식 을 추천 합 니 다. 사용 자 는 논리 적 입력 흐름 의 임 의 점 에 머 물 러 다른 논 리 를 처리 한 다음 에 이전의 처 리 를 계속 할 수 있 습 니 다.전체 흐름 처리 가 끝 날 때 까지 기다 릴 필요 가 없다.다음은 하나의 예 다.
KeyFinder.java:
 
class KeyFinder implements ContentHandler{
  private Object value;
  private boolean found = false;
  private boolean end = false;
  private String key;
  private String matchKey;
        
  public void setMatchKey(String matchKey){
    this.matchKey = matchKey;
  }
        
  public Object getValue(){
    return value;
  }
        
  public boolean isEnd(){
    return end;
  }
        
  public void setFound(boolean found){
    this.found = found;
  }
        
  public boolean isFound(){
    return found;
  }
        
  public void startJSON() throws ParseException, IOException {
    found = false;
    end = false;
  }

  public void endJSON() throws ParseException, IOException {
    end = true;
  }

  public boolean primitive(Object value) throws ParseException, IOException {
    if(key != null){
      if(key.equals(matchKey)){
        found = true;
        this.value = value;
        key = null;
        return false;
      }
    }
    return true;
  }

  public boolean startArray() throws ParseException, IOException {
    return true;
  }

        
  public boolean startObject() throws ParseException, IOException {
    return true;
  }

  public boolean startObjectEntry(String key) throws ParseException, IOException {
    this.key = key;
    return true;
  }
        
  public boolean endArray() throws ParseException, IOException {
    return false;
  }

  public boolean endObject() throws ParseException, IOException {
    return true;
  }

  public boolean endObjectEntry() throws ParseException, IOException {
    return true;
  }
}

 
Main logic:
String jsonText ="{\"first\": 123, \"second\": [{\"k1\":{\"id\":\"id1\"}}, 4, 5, 6, {\"id\": 123}], \"third\": 789, \"id\": null}";   JSONParser parser =newJSONParser();   KeyFinder finder =newKeyFinder();   finder.setMatchKey("id");   try{     while(!finder.isEnd()){       parser.parse(jsonText, finder,true);       if(finder.isFound()){         finder.setFound(false);         System.out.println("found id:");         System.out.println(finder.getValue());       }     }             }   catch(ParseException pe){     pe.printStackTrace();   }

실행 결과:
  found id:   id1   found id:   123   found id:   null

예 6: 전체 대상 그림 을 SAX 식 으로 해석
class Transformer implements ContentHandler{
        private Stack valueStack;
        
        public Object getResult(){
            if(valueStack == null || valueStack.size() == 0)
                return null;
            return valueStack.peek();
        }
        
        public boolean endArray () throws ParseException, IOException {
            trackBack();
            return true;
        }

        public void endJSON () throws ParseException, IOException {}

        public boolean endObject () throws ParseException, IOException {
            trackBack();
            return true;
        }

        public boolean endObjectEntry () throws ParseException, IOException {
            Object value = valueStack.pop();
            Object key = valueStack.pop();
            Map parent = (Map)valueStack.peek();
            parent.put(key, value);
            return true;
        }

        private void trackBack(){
            if(valueStack.size() > 1){
                Object value = valueStack.pop();
                Object prev = valueStack.peek();
                if(prev instanceof String){
                    valueStack.push(value);
                }
            }
        }
        
        private void consumeValue(Object value){
            if(valueStack.size() == 0)
                valueStack.push(value);
            else{
                Object prev = valueStack.peek();
                if(prev instanceof List){
                    List array = (List)prev;
                    array.add(value);
                }
                else{
                    valueStack.push(value);
                }
            }
        }
        
        public boolean primitive (Object value) throws ParseException, IOException {
            consumeValue(value);
            return true;
        }

        public boolean startArray () throws ParseException, IOException {
            List array = new JSONArray();
            consumeValue(array);
            valueStack.push(array);
            return true;
        }

        public void startJSON () throws ParseException, IOException {
            valueStack = new Stack();
        }

        public boolean startObject () throws ParseException, IOException {
            Map object = new JSONObject();
            consumeValue(object);
            valueStack.push(object);
            return true;
        }

        public boolean startObjectEntry (String key) throws ParseException, IOException {
            valueStack.push(key);
            return true;
        }
        
    }
 
주 방식 논리:
 
String jsonString = <Input JSON text>;
    Object value = null;
    JSONParser parser = new JSONParser();
    Transformer transformer = new Transformer();
        
    parser.parse(jsonString, transformer);
    value = transformer.getResult();
 실행 결과:
 
String jsonString =<Input JSON text>;     Object value =null;     JSONParser parser =newJSONParser();     value = parser.parse(jsonString);

주의:
JSONPUser 는 라인 이 안전 하지 않 습 니 다.

좋은 웹페이지 즐겨찾기