Java 删除json vaule中的空白

Java 删除json vaule中的空白,java,json,Java,Json,我有一个存储webservice响应的字符串,如下所示。在这个字符串中,我想使用java删除双引号(开始和结束)旁边的空白 String WebserviceResponse; { "assessmentID": 289, "assesmentName": " OneCert ", "accountName": " spadmin ",

我有一个存储webservice响应的字符串,如下所示。在这个字符串中,我想使用java删除双引号(开始和结束)旁边的空白

String WebserviceResponse;

    {
        "assessmentID": 289,
        "assesmentName": " OneCert ",
        "accountName": " spadmin ",
        "assetName": " OneCert ",
        "applicationName": " OneCert ",
        "accountType": " LocalAccount ",
        "environment": " Test "
    },
    {
        "assessmentID": 289,
        "assesmentName": "OneCert ",
        "accountName": "9000032",
        "assetName": "OneCert",
        "applicationName": "OneCert ",
        "accountType": "zone2.scbdev.net",
        "environment": "Test"
    }
我尝试使用下面的代码删除双引号旁边的空格 字符串FormattedResponse=WebserviceResponse.replaceAll(“\s”,“”)


但是它删除了所有的空格。你能帮我一下吗。

如果你不想解析JSON,你可以使用这个正则表达式:
(?>\\S)(\\S)(?>\”
[更新如下]并将匹配项替换为
(空字符串)

打破这一局面:

(?>\\S)
非捕获组,查找任何非空白的内容

(\\s)
寻找空白的捕获组

(?>\”)
非捕获组,查找
(引号)

您将有空格匹配。然后是带有
”的
replaceAll()
(空字符串)

结果如下:

更新 我做了一些测试,在非捕获组和java方面遇到了一些问题。使用lookahead/lookahead可能更好。我正在更新答案并在这里发布一个示例


这是regex的lookahead/lookahead版本:
(?请注意:以下示例可能仅适用于基本的JSON字符串。为了获得更好的结果,您应该使用一些来再次解码、过滤和编码字符串

您可以在字符串上使用一些regexp,如下所示:

感谢:

  • 大致上,这会将不带空格的键和值提取到组中
  • 并在没有空格的情况下替换它们
Java代码:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

final String regex = "\"([^\"]+)\":\\s*\"\\s*([^\"]+)\\s*\"";
final String string = " {\n"
     + "        \"assessmentID\": 289,\n"
     + "        \"assesmentName\": \" OneCert \",\n"
     + "        \"accountName\": \" spadmin \",\n"
     + "        \"assetName\": \" OneCert \",\n"
     + "        \"applicationName\": \" OneCert \",\n"
     + "        \"accountType\": \" LocalAccount \",\n"
     + "        \"environment\": \" Test \"\n"
     + "    },\n"
     + "    {\n"
     + "        \"assessmentID\": 289,\n"
     + "        \"assesmentName\": \"OneCert \",\n"
     + "        \"accountName\": \"9000032\",\n"
     + "        \"assetName\": \"OneCert\",\n"
     + "        \"applicationName\": \"OneCert \",\n"
     + "        \"accountType\": \"zone2.scbdev.net\",\n"
     + "        \"environment\": \"Test\"\n"
     + "    }";
final String subst = "\"$1\": \"$2\"";

final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE);
final Matcher matcher = pattern.matcher(string);

// The substituted value will be contained in the result variable
final String result = matcher.replaceAll(subst);

System.out.println("Substitution result: " + result);

如果您只想删除JSON值中的空白,您需要知道定义值的部分(甚至可能是哪个值)。因此,您需要首先将JSON字符串解析为实际对象,确定并修改所需的值,然后将对象重新序列化为JSON字符串。-不要尝试使用正则表达式,因为这是一个灾难性的后果:JSON不是正则语言,因此正则表达式不适合。解析JSON,更新值,重新生成JSON。抱歉,我忘了避开反斜杠。已更新。
"([^"]+)":\s*"\s*([^"]+)\s*"
import java.util.regex.Matcher;
import java.util.regex.Pattern;

final String regex = "\"([^\"]+)\":\\s*\"\\s*([^\"]+)\\s*\"";
final String string = " {\n"
     + "        \"assessmentID\": 289,\n"
     + "        \"assesmentName\": \" OneCert \",\n"
     + "        \"accountName\": \" spadmin \",\n"
     + "        \"assetName\": \" OneCert \",\n"
     + "        \"applicationName\": \" OneCert \",\n"
     + "        \"accountType\": \" LocalAccount \",\n"
     + "        \"environment\": \" Test \"\n"
     + "    },\n"
     + "    {\n"
     + "        \"assessmentID\": 289,\n"
     + "        \"assesmentName\": \"OneCert \",\n"
     + "        \"accountName\": \"9000032\",\n"
     + "        \"assetName\": \"OneCert\",\n"
     + "        \"applicationName\": \"OneCert \",\n"
     + "        \"accountType\": \"zone2.scbdev.net\",\n"
     + "        \"environment\": \"Test\"\n"
     + "    }";
final String subst = "\"$1\": \"$2\"";

final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE);
final Matcher matcher = pattern.matcher(string);

// The substituted value will be contained in the result variable
final String result = matcher.replaceAll(subst);

System.out.println("Substitution result: " + result);