我有一個很長的字符串,看起來像Java的正則表達式字符串轉換爲有效的JSON字符串
{abc:\"def\", ghi:\"jkl\"}
我想將其轉換爲有效的JSON字符串像
{\"abc\":\"def\", \"ghi\":\"jkl\"}
我開始看對字符串對象的replaceAll(String regex, String replacement)
方法,但我努力尋找它的正確的正則表達式。
有人可以幫助我這個。
我有一個很長的字符串,看起來像Java的正則表達式字符串轉換爲有效的JSON字符串
{abc:\"def\", ghi:\"jkl\"}
我想將其轉換爲有效的JSON字符串像
{\"abc\":\"def\", \"ghi\":\"jkl\"}
我開始看對字符串對象的replaceAll(String regex, String replacement)
方法,但我努力尋找它的正確的正則表達式。
有人可以幫助我這個。
我必須假定「鍵」和「值」只包含 「單詞字符」(\ w),並且它們中沒有空格。
這是我的程序。另請參閱在線評論:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegexJson {
public static void main(String[] args) {
/*
* Note that the input string, when expressed in a Java program, need escape
* for backslash (\) and double quote ("). If you read directly
* from a file then these escapes are not needed
*/
String input = "{abc:\\\"def\\\", ghi:\\\"jkl\\\"}";
// regex for one pair of key-value pair. Eg: abc:\"edf\"
String keyValueRegex = "(?<key>\\w+):(?<value>\\\\\\\"\\w+\\\\\\\")";
// regex for a list of key-value pair, separated by a comma (,) and a space ()
String pairsRegex = "(?<pairs>(,*\\s*"+keyValueRegex+")+)";
// regex include the open and closing braces ({})
String regex = "\\{"+pairsRegex+"\\}";
StringBuilder sb = new StringBuilder();
sb.append("{");
Pattern p1 = Pattern.compile(regex);
Matcher m1 = p1.matcher(input);
while (m1.find()) {
String pairs = m1.group("pairs");
Pattern p2 = Pattern.compile(keyValueRegex);
Matcher m2 = p2.matcher(pairs);
String comma = ""; // first time special
while (m2.find()) {
String key = m2.group("key");
String value = m2.group("value");
sb.append(String.format(comma + "\\\"%s\\\":%s", key, value));
comma = ", "; // second time and onwards
}
}
sb.append("}");
System.out.println("input is: " + input);
System.out.println(sb.toString());
}
}
打印出這個計劃的是:
input is: {abc:\"def\", ghi:\"jkl\"}
{\"abc\":\"def\", \"ghi\":\"jkl\"}
另一種方法是使用寬鬆解析器解析它,例如, Gson有['setLenient()'](https://static.javadoc.io/com.google.code.gson/gson/2.6.2/com/google/gson/stream/JsonReader.html#setLenient-boolean -) 方法。然後將其寫回爲有效的JSON。 – Andreas
你正在使用哪個json依賴關係?更好的選擇是根據正確的格式生成它,不管它是客戶端還是服務器端 –
您可以嘗試通過搜索一系列標識符字符後跟':'來進行替換,但如果冒號存在,則可能會導致失敗在任何值字符串中。其他可能會擊敗你的東西是其中一個值中的引號。有可能想出一個處理所有事情的複雜正則表達式,但在這種情況下,最好編寫自己的詞法分析器來處理輸入中的令牌(比如'{',':',',',標識符,字符串文字)並從中工作。無論如何,過於複雜的正則表達式是不可讀的,並且容易出錯。 – ajb