package com.roid.logparse.utils;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ForkJoinPool;
import java.util.stream.IntStream;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.google.gson.Gson;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.roid.logparse.consts.Consts;
public class KeyParseUtil {
static {
if (System.getProperty("log_name") == null) {
System.setProperty("log_name", Consts.DEFAULT_LOG_NAME);
}
}
private static final Logger log = LoggerFactory.getLogger(KeyParseUtil.class);
private static final int DEPTH_LIMIT = 4;
public static List<String> parseKeys(String jsonStr) {
List<String> keys = new ArrayList<String>();
Gson gs = new Gson();
JsonElement el = gs.fromJson(jsonStr, JsonElement.class);
JsonObject json = el.getAsJsonObject();
keys = getJsonKeys(keys, json, ".", 1);
return keys;
}
private static List<String> getJsonKeys(List<String> keys, JsonObject json, String hd, int depth) {
if (json == null) {
return null;
}
if (!".".equals(hd)) {
hd = hd + ".";
}
for (Map.Entry<String, JsonElement> entry : json.entrySet()) {
// if (depth >= DEPTH_LIMIT) {
// if (entry.getKey() != null && !"".equals(entry.getKey().trim())
// && !keys.contains(hd + entry.getKey())) {
// keys.add(hd + entry.getKey());
// }
// continue;
// }
if (entry.getValue().isJsonObject() && depth < DEPTH_LIMIT) {
getJsonKeys(keys, entry.getValue().getAsJsonObject(), hd + entry.getKey(), ++depth);
} else {
if (entry.getKey() != null && !"".equals(entry.getKey().trim())
&& !keys.contains(hd + entry.getKey())) {
keys.add(hd + entry.getKey());
}
}
}
return keys;
}
public static void main(String[] args) {
String[] jsonStr = { "{\"glossary\":{\"title\":\"example glossary\",\"GlossDiv\":{\"title\":\"S\",\"GlossList\":{\"GlossEntry\":{\"ID\":\"SGML\",\"SortAs\":\"SGML\",\"GlossTerm\":\"Standard Generalized Markup Language\",\"Acronym\":\"SGML\",\"Abbrev\":\"ISO 8879:1986\",\"GlossDef\":{\"para\":\"A meta-markup language, used to create markup languages such as DocBook.\",\"GlossSeeAlso\":[\"GML\",\"XML\"]},\"GlossSee\":\"markup\"}}}}}", };
ForkJoinPool fjpool = new ForkJoinPool(3);
try {
fjpool.submit(() -> {
IntStream.range(0, 1).parallel().forEach(idx -> {
List<String> arrStr = KeyParseUtil.parseKeys(jsonStr[idx]);
for (String key : arrStr) {
System.out.println(idx + ":" + key);
}
System.out.println(idx + ": length[" + arrStr.size() + "]," + Thread.currentThread().getName());
});
}).get();
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
}
}
json 키 추출 만들었는데.. 뭔가 부족해 ㅇㅅㅇ
♨2.92™(roidz)
2022-01-25 23:32
추천 0
댓글 4
다른 게시글
-
si 초봉 3500이면 할만하냐? [5]익명(223.38) | 22.01.25추천 0
-
문재인 시계찬 배성재도 요즘 안나오더라천민자본주..(122.42) | 22.01.25추천 0
-
우리나라는 과장하는 문화가 있는듯익명(61.76) | 22.01.25추천 2
-
c++ 독학하고 있는데 [4]Limbo(dlawotjr1999) | 22.01.25추천 0
-
국비 수료하면 초봉 쎄지않냐? [10]익명(220.72) | 22.01.25추천 0
-
나는 문재인보다 문재인 지지하는 대깨문 대깨윤들이천민자본주..(122.42) | 22.01.25추천 0
-
인서울4년제 컴공나오고 ㅈ소 si가면 병신? [2]익명(223.38) | 22.01.25추천 0
-
npm으로 모듈같은거 설치할려고 하는데 이렇게 된다 ㅜㅜ [1]익명(59.9) | 22.01.25추천 0
-
난 자기소개만하면 간경련 온것마냥 존나 온몸이 뒤틀림 [1]익명(39.113) | 22.01.25추천 0
-
국비충 si는 원래 이런곳임? [15]익명(106.101) | 22.01.25추천 2
2400
중간에 parent가 되는 부분도 포함 시켜야겠단 느낌이 들엉 ㅇㅅㅇ
수정 완료~ 땡~
다시 봐도 뭔가 재귀 루프를 잘못 만들었엉 (불필요 포함)~ 담에 시간 날때 고쳐봐야징 ㅇㅅㅇ