import java.util.LinkedHashMap;
import java.util.Scanner;
public class Main {
private Scanner input = new Scanner(System.in);
private LinkedHashMap<String,String> dict = new LinkedHashMap<>();
public static void main(String[] args) {
new Main().run();
}
private void run() {
int n = input.nextInt();
int m = input.nextInt();
input.nextLine();
StringBuffer sb = new StringBuffer();
String str = "";
for (int i = 0; i < n; i++) {
sb.append(input.nextLine());
}
str = sb.toString();
dealwithjson(str);
// for (String s : dict.keySet()) {
// System.out.println(s+" "+dict.get(s));
// }
String ask;
for (int i = 0; i < m; i++) {
ask = input.nextLine();
ask = dict.get(ask);
if (ask==null){
System.out.println("NOTEXIST");
}else if (ask.equals("fuckccf")){
System.out.println("OBJECT");
}else {
System.out.println("STRING"+" "+ask);
}
}
}
private void dealwithjson(String str) {
// 先扒皮,扒掉第一个和最后一个{}
int lbrace = str.indexOf("{");
int rbrace = str.lastIndexOf("}");
str = str.substring(lbrace + 1, rbrace).trim();
// System.out.println(str);
Node node = new Node("",str);
String key;
String val;
if (node.remain.equals("")){
return;
}
while (true){
//获取key
node = gettoken(node.remain);
key = node.token;
//获取:
str = node.remain;
node = gettoken(str);
//获取value
node = gettoken(node.remain);
val = node.token;
if (node.isobj){
dict.put(key,"fuckccf");
dealsomejson(key,val);
}else {
dict.put(key,val);
}
//获取,
node = gettoken(node.remain);
if (node == null){
break;
}
}
}
private void dealsomejson(String subkey, String str) {
// 先扒皮,扒掉第一个和最后一个{}
int lbrace = str.indexOf("{");
int rbrace = str.lastIndexOf("}");
str = str.substring(lbrace + 1, rbrace).trim();
Node node = new Node("",str);
String key;
String val;
if (node.remain.equals("")){
return;
}
while (true){
//获取key
node = gettoken(node.remain);
key = node.token;
//获取:
str = node.remain;
node = gettoken(str);
//获取value
node = gettoken(node.remain);
val = node.token;
if (node.isobj){
dict.put(subkey+"."+key,"fuckccf");
dealsomejson(subkey+"."+key,val);
}else {
dict.put(subkey+"."+key,val);
}
//获取,
node = gettoken(node.remain);
if (node == null){
break;
}
}
}
private Node gettoken(String str) {
if (str.equals(""))
return null;
char c = str.charAt(0);
switch (c){
case ',':
case ':':
return new Node(c+"",str.substring(1).trim());
case '{':
int rbrace = getrbrace(str);
return new Node(str.substring(0,rbrace+1),str.substring(rbrace+1).trim(),true);
case '\"':
StringBuilder sb = new StringBuilder();
int falg = 1;
int i;
for (i = 1; i < str.length(); i++) {
if (str.charAt(i)=='\\'&&falg==1){
falg = 2;
continue;
}
if (str.charAt(i)=='\"'&&falg==1){
break;
}
if (falg == 2){
falg = 1;
}
sb.append(str.charAt(i));
}
return new Node(sb.toString(),str.substring(i+1).trim());
}
return null;
}
private int getrbrace(String str) {
boolean instr = false;
int rbrace = 0;
int index = 0;
for (int i = 0; i < str.length(); i++) {
if (str.charAt(i) == '{'&&!instr){
rbrace++;
}
if (str.charAt(i) == '}'&&!instr){
rbrace--;
}
if (rbrace==0){
index = i;
break;
}
if (str.charAt(i) == '\"'){
i++;
while (true){
if (str.charAt(i)=='\\'){
i+=2;
}else {
i++;
}
if (str.charAt(i)=='\"'){
break;
}
}
}
}
return index;
}
class Node{
boolean isobj;
String token;
String remain;
public Node(String token,String remain){
this.token = token;
this.remain = remain;
isobj = false;
}
public Node(String token,String remain,boolean isobj){
this.token = token;
this.remain = remain;
this.isobj = isobj;
}
@Override
public String toString() {
return token;
}
}
}
ccf csp JSON查询
最新推荐文章于 2024-08-01 18:17:14 发布