我有一些代碼來屏蔽json文件中的值。 但我有這樣的感覺,應該有一個更有效的方法來做到這一點。更有效的方法來替換字符串來屏蔽json文件(java)
這是我當前的代碼:
private static final String STRING_REPLACEMENT = "$1 \"String\" $4";
private static final String FLOAT_REPLACEMENT = "$1 \"float\" $4";
private static final String INT_REPLACEMENT = "$1 \"Integer\" $4";
private static final String BOOL_REPLACEMENT = "$1 \"Boolean\" $4";
和實際掩蔽代碼:
out = out.replaceAll("(\"\\w+\"\\s?:)\\s?\"((\\\\\"|[^\"])*\")", "$1 \"String\"");
out = out.replaceAll("(\"\\w+\"\\s?:)\\s?(\\d+\\.\\d+)", "$1 \"float\"");
out = out.replaceAll("(\"\\w+\"\\s?:)\\s?(\\d+)", "$1 \"Integer\"");
out = out.replaceAll("(\"\\w+\"\\s?:)\\s?(true|false)", "$1 \"Boolean\"");
out = out.replaceAll("(\\[\\s?)\"((\\\\\"|[^\"])*\")(\\s?,)", STRING_REPLACEMENT);
out = out.replaceAll("(,\\s?)\"((\\\\\"|[^\"])*\")(\\s?,)", STRING_REPLACEMENT);
out = out.replaceAll("(,\\s?)\"((\\\\\"|[^\"])*\")(\\s?\\])", STRING_REPLACEMENT);
out = out.replaceAll("(\\[\\s?)((\\d)+\\.\\d+)(\\s?,)", FLOAT_REPLACEMENT);
out = out.replaceAll("(,\\s?)((\\d)+\\.\\d+)(\\s?,)", FLOAT_REPLACEMENT);
out = out.replaceAll("(,\\s?)((\\d)+\\.\\d+)(\\s?\\])", FLOAT_REPLACEMENT);
out = out.replaceAll("(\\[\\s?)((\\d)+)(\\s?,)", INT_REPLACEMENT);
out = out.replaceAll("(,\\s?)((\\d)+)(\\s?,)", INT_REPLACEMENT);
out = out.replaceAll("(,\\s?)((\\d)+)(\\s?\\])", INT_REPLACEMENT);
out = out.replaceAll("(\\[\\s?)((true|false))(\\s?,)", BOOL_REPLACEMENT);
out = out.replaceAll("(,\\s?)((true|false))(\\s?,)", BOOL_REPLACEMENT);
out = out.replaceAll("(,\\s?)((true|false))(\\s?\\])", BOOL_REPLACEMENT);
是否有人有任何建議如何改進這一點。我知道我可以對正則表達式進行分組,但是恐怕這會影響可讀性。我注意到,如果我將3個正則表達式合併爲一個更多?它並不總是以正確的方式找到它,所以掩蔽失敗了。
我會避免在結構化語言(如JSON)中執行任何類型的替換,方法是將它視爲String並使用正則表達式開始。很難說這裏的效率(因爲它也將取決於有效負載和事件的大小等),但爲了可讀性/可維護性,您可能希望使用JSON解析器/寫入器來代替並重新創建對象。 – Mena