package com.eoi.goblin;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONException;
import com.alibaba.fastjson.JSONObject;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
public class Test {
public static void main(String[] args) {
HashMap<String, Set<String>> keywordMap = new HashMap<>();
HashSet<String> value = new HashSet<>();
value.add("1");
value.add("3");
keywordMap.put("data", value);
String jsonText = "{\n" +
" \"data\": [\n" +
" 1,\n" +
" 23,\n" +
" 34,\n" +
" 12,\n" +
" 3\n" +
" ]\n" +
"}";
JSONObject resultJson = new JSONObject();
jsonObjParseRecur(keywordMap, jsonText, resultJson);
System.out.println("resultJson = " + resultJson);
}
public static void jsonObjParseRecur(Map<String, Set<String>> keywordMap, String jsonText, Object resultJson) {
try{
Object obj = JSONObject.parse(jsonText);
if (obj instanceof JSONObject) {
JSONObject jsonObject = (JSONObject) obj;
jsonObject.forEach((k, v) -> {
Set<String> wordList = keywordMap.get(k);
if (wordList != null) {
if (wordList.contains(v.toString())) {
if (resultJson instanceof JSONObject) {
((JSONObject) resultJson).put(k, v);
}
if (resultJson instanceof JSONArray) {
JSONObject e = new JSONObject();
e.put(k, v);
((JSONArray) resultJson).add(e);
}
}
}
if (jsonObject.get(k) instanceof JSONArray) {
JSONArray temJsonArray = new JSONArray();
((JSONObject) resultJson).put(k, temJsonArray);
JSONArray jsonArray = jsonObject.getJSONArray(k);
for (int i = 0; i < jsonArray.size(); i++) {
Object o = jsonArray.get(i);
if (o instanceof JSONObject) {
JSONObject jsonArrayObj = (JSONObject) o;
String jsonArrayObjString = jsonArrayObj.toString();
jsonObjParseRecur(keywordMap, jsonArrayObjString, temJsonArray);
} else {
if (wordList != null) {
if (wordList.contains(o.toString())) {
temJsonArray.add(o);
}
}
}
}
}
if (jsonObject.get(k) instanceof JSONObject) {
JSONObject temJsonObj = new JSONObject();
((JSONObject) resultJson).put(k, temJsonObj);
jsonObjParseRecur(keywordMap, jsonObject.get(k).toString(), temJsonObj);
}
});
}
if (obj instanceof JSONArray) {
JSONArray jsonArray = (JSONArray) obj;
JSONArray temJsonArray = new JSONArray();
((JSONObject) resultJson).put("data", temJsonArray);
for (int i = 0; i < jsonArray.size(); i++) {
JSONObject jsonArrayObj = jsonArray.getJSONObject(i);
String jsonArrayObjString = jsonArrayObj.toString();
jsonObjParseRecur(keywordMap, jsonArrayObjString, temJsonArray);
}
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}