Java正则表达式将字符串转换为有效的json字符串

时间:2016-12-31 03:47:39

标签: java json regex string

我有一个非常长的字符串,看起来像

{abc:\"def\", ghi:\"jkl\"}

我想将其转换为有效的json字符串,如

{\"abc\":\"def\", \"ghi\":\"jkl\"}

我开始查看字符串对象上的replaceAll(String regex, String replacement)方法,但我正在努力为它找到正确的正则表达式。

有人可以帮我解决这个问题吗。

2 个答案:

答案 0 :(得分:2)

在这种特殊情况下,regex应该查找以{space,继续进行的单词,而不是" < / p>

String str = "{abc:\"def\", ghi:\"jkl\"}";
String regex = "(?:[{ ,])(\\w+)(?!\")";
System.out.println(str.replaceAll(regex, "\\\"$1\\\""));

DEMOregex解释

答案 1 :(得分:0)

我必须假设“关键”和“价值”仅由 “单词字符”(\ 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\"}