JAva Jsonクエリー

7989 ワード

package test;
//json         ,                  。
//             ,   parseString          ,parseObject         。
//                    ,               、     ……        。
//json         ,     map  。map          ,    .       。
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.Map;
import java.util.Scanner;
class NUN{
    int i = 0;
}
public class Main {
    static public String parseString(String str, NUN i) {
        // String tmp="";//tmp         
        StringBuffer sb = new StringBuffer();
        if (str.charAt(i.i) == '"')
            i.i++;//             
        while (i.i < str.length()) {
            if (str.charAt(i.i) == '\\') {//   \              
                i.i++;
                // tmp += str.charAt(i);
                sb.append(str.charAt(i.i));
                i.i++;
            } else if (str.charAt(i.i) == '"') {//        
                i.i++;//     
                break;
            } else {
                sb.append(str.charAt(i.i));
                // tmp += str.charAt(i);
                i.i++;
            }
        }
//      if (str.charAt(i.i) == '"')
//          i.i++; //      
        return sb.toString();
    } 

    static public void parseObject(String str, String prefix, Map dict, NUN i) {
        if (str.charAt(i.i) == '{')
            i.i++;// prefix   
        String key = "";
        String value;//       key value
        Boolean strType = false;// false:key, true:value,    key value
        while (i.i < str.length()) {
            if (str.charAt(i.i) == '"') {//      key value
                String tmp = parseString(str, i);
                if (strType) {// value
                    value = tmp;
                    dict.put(key, value);
                } else {// key
                    key = prefix + (prefix == "" ? "" : ".") + tmp;//   prefix        , .    
                }
            } else if (str.charAt(i.i) == ':') {//      value
                strType = true;
                i.i++;
            } else if (str.charAt(i.i) == ',') {//      key
                strType = false;
                i.i++;
            } else if (str.charAt(i.i) == '{') {//          
                dict.put(key, "");//       
                parseObject(str, key, dict, i);
            } else if (str.charAt(i.i) == '}') {//            
                i.i++;
                break;
            } else {
                i.i++;//       
            }
        }
//      if (str.charAt(i.i) == '}') {//    json       
//          i.i++;
//      }
    }

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int N = in.nextInt();
        int M = in.nextInt();
        String json = new String();
        in.nextLine();// in.nextInt          
        for (int n = 0; n < N; n++) {
            String tmp;
            tmp = in.nextLine();
            json += tmp;//      ,             
        }
        Map dict = new HashMap();
        NUN i = new NUN();
        parseObject(json, "", dict, i);
        String query;
        for (int m = 0; m < M; m++) {
            query = in.nextLine();
            if (!dict.containsKey(query)) {
                System.out.println("NOTEXIST");
            } else {
                if (dict.get(query).equals("")) {
                    System.out.println("OBJECT");
                } else {
                    System.out.println("STRING " + dict.get(query));
                }
            }
        }
    }
}