在JSON字符串中添加双引号的简单方法

时间:2014-11-14 18:00:13

标签: java json string spring double-quotes

我正在尝试写一些返回search suggestion结果的内容。

假设我有一个这样的字符串:

"[Harry,[harry potter,harry and david]]"

格式类似于[A_STRING,A_STRING_ARRAY_HERE]。

但我想输出格式就像

[ "Harry",["harry potter","harry and david"]]

这样我就可以把它放到HTTP Response Body中了。

有没有一种简单的方法可以做到这一点,我不想从头开始为一个非常简单的字符串添加“”。

3 个答案:

答案 0 :(得分:3)

演示

String text = "[Harry,[harry potter,harry and david]]";
text = text.replaceAll("[^\\[\\],]+", "\"$0\"");

System.out.println(text);

输出:["Harry",["harry potter","harry and david"]]


说明:
如果我理解正确,您希望用双引号括起所有非[ - 和 - ] - 和 - ,字符系列。在这种情况下,您只需使用replaceAll方法和正则表达式([^\\[\\],]+),其中

  • [^\\[\\],] - 代表一个非[],(逗号)的非字符
  • [^\\[\\],]+ - +表示之前的元素可以出现一次或多次,在这种情况下,它代表一个或多个不是[的字符或],(逗号)

现在我们可以使用双括号$0围绕"$0" 0(整个匹配)"所代表的匹配。 BTW,因为\是String中的元字符(它用于开始和结束字符串),如果我们想要创建它的文字,我们需要转义它。为此,我们需要在其前面放置"$0",以便最后表示"\"$0\""的字符串需要写为$0

有关{{1}}使用的第0组的更多说明(引自group):

  

还有一个特殊组,即组0,它始终代表整个表达式。

答案 1 :(得分:0)

如果格式[A_STRING,A_STRING_ARRAY_HERE]一致,只要任何字符串中没有逗号,那么您可以使用逗号作为分隔符,然后相应地添加双引号。例如:

public String format(String input) {
    String[] d1 = input.trim().split(",", 2);
    String[] d2 = d1[1].substring(1, d1[1].length() - 2).split(",");
    return "[\"" + d1[0].substring(1) + "\",[\"" + StringUtils.join(d2, "\",\"") + "\"]]";
}

现在,如果您使用字符串format()调用"[Harry,[harry potter,harry and david]]",它将返回您想要的结果。并非我使用Apache Commons Lang库中的StringUtils类将String数组与分隔符连接在一起。您可以使用自己的自定义函数执行相同的操作。

答案 2 :(得分:0)

这项计划的和平有效(你可以优化它):

//...
String str = "[Harry,[harry potter,harry and david]]";

public String modifyData(String str){

    StringBuilder strBuilder = new StringBuilder();
    for (int i = 0; i < str.length(); i++) {
        if (str.charAt(i) == '[' && str.charAt(i + 1) == '[') {
            strBuilder.append("[");
        } else if (str.charAt(i) == '[' && str.charAt(i + 1) != '[') {
            strBuilder.append("[\"");
        } else if (str.charAt(i) == ']' && str.charAt(i - 1) != ']') {
            strBuilder.append("\"]");
        } else if (str.charAt(i) == ']' && str.charAt(i - 1) == ']') {
            strBuilder.append("]");
        } else if (str.charAt(i) == ',' && str.charAt(i + 1) == '[') {
            strBuilder.append("\",");
        } else if (str.charAt(i) == ',' && str.charAt(i + 1) != '[') {
            strBuilder.append("\",\"");
        } else {
            strBuilder.append(str.charAt(i));
        }
    }
return strBuilder.toString();
}