从 json 响应中删除 unicode 字符串和空格
Remove unicode string and spaces from json response
我正在调用一个网络服务,它给我 Json 响应。这是代码
URL url = new URL(strUrl);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setDoOutput(true);
...
//get response text
BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream(),"UTF-8"));
StringBuffer response = new StringBuffer();
while ((respText = br.readLine()) != null) {
response.append(respText);
}
br.close();
retValue = response.toString();
问题是响应如下
"{\u000d\u000a \"groups\": [\u000d\u000a {\u000d\u000a \"signingGroupId\": \"323793\",\u000d\u000a \"groupName\": \"1440 Signing Group 1\",\u000d\u000a \"groupType\": \"sharedSigningGroup\",\u000d\u000a \"created\": \"3\/27\/2019 6:08:34 AM\",\u000d\u000a \"createdBy\": \"ABC Software\",\u000d\u000a \"modified\": \"4\/1\/2019 6:40:45 AM\",\u000d\u000a \"modifiedBy\": \"Corner O'Brien\"\u000d\u000a },\u000d\u000a {\u000d\u000a \"signingGroupId\": \"323794\",\u000d\u000a \"groupName\": \"1440 Another Group\",\u000d\u000a \"groupType\": \"sharedSigningGroup\",\u000d\u000a \"created\": \"3\/27\/2019 6:14:52 AM\",\u000d\u000a \"createdBy\": \"XYZ Software\",\u000d\u000a \"modified\": \"3\/27\/2019 6:16:37 AM\",\u000d\u000a \"modifiedBy\": \"XYZ Software\"\u000d\u000a }\u000d\u000a ]\u000d\u000a}"
我想从上面的回复中做出这样的回复
"{"groups":[{"signingGroupId": "323793","groupName": "1440 Signing Group 1","groupType": "sharedSigningGroup","created": "3/27/2019 6:08:34 AM","createdBy": "ABC Software","modified": "4/1/2019 6:40:45 AM","modifiedBy": "John O'Brien"},{"signingGroupId": "323794","groupName": "1440 Another Group","groupType": "sharedSigningGroup","created": "3/27/2019 6:14:52 AM","createdBy": "ABC Software","modified": "3/27/2019 6:16:37 AM","modifiedBy": "ABC Software"}]}"
也就是把后面的\u000d\u000a
和spaces
全部去掉。但不要从任何 Json 属性.
中删除 space
我试过了
retValue = retValue.replace("\u000d\u000a", "");
retValue = retValue.replace("\", "");
这给了我
"{ "groups": [ { "signingGroupId": "323793", "groupName": "1440 Signing Group 1", "groupType": "sharedSigningGroup", "created": "3/27/2019 6:08:34 AM", "createdBy": "ABC Software", "modified": "4/1/2019 6:40:45 AM", "modifiedBy": "John O'Brien" }, { "signingGroupId": "323794", "groupName": "1440 Another Group", "groupType": "sharedSigningGroup", "created": "3/27/2019 6:14:52 AM", "createdBy": "XYZ Software", "modified": "3/27/2019 6:16:37 AM", "modifiedBy": "XYZ Software" } ]}"
但是还有space。现在如果我使用
String replcaedNewLineAndSpaces = retValue.replaceAll("[ \t]+", "");
这一行有问题,它还从 Json 属性中删除了 spaces。
"{"groups":[{"signingGroupId":"323793","groupName":"1440SigningGroup1","groupType":"sharedSigningGroup","created":"3/27/20196:08:34AM","createdBy":"ABCSoftware","modified":"4/1/20196:40:45AM","modifiedBy":"JohnO'Brien"},{"signingGroupId":"323794","groupName":"1440AnotherGroup","groupType":"sharedSigningGroup","created":"3/27/20196:14:52AM","createdBy":"XYZSoftware","modified":"3/27/20196:16:37AM","modifiedBy":"XYZSoftware"}]}"
查看 "groupName": "1440 Signing Group 1"
的 groupName。现在变成
1440SigningGroup1
。其他属性也类似。
有没有它保持 Json 字符串不变,但删除它后面的 \u000d\u000a
和 spaces
。所以最后的回复变成
"{"groups":[{"signingGroupId": "323793","groupName": "1440 Signing Group 1","groupType": "sharedSigningGroup","created": "3/27/2019 6:08:34 AM","createdBy": "ABC Software","modified": "4/1/2019 6:40:45 AM","modifiedBy": "John O'Brien"},{"signingGroupId": "323794","groupName": "1440 Another Group","groupType": "sharedSigningGroup","created": "3/27/2019 6:14:52 AM","createdBy": "ABC Software","modified": "3/27/2019 6:16:37 AM","modifiedBy": "ABC Software"}]}"
谢谢
如评论中所述,创建 POJO class 并解析 JSON 将是最佳且安全的。 (我觉得最常用的库是GSon library)
但是,如果您坚持要删除空格,请使用简单的正则表达式:
retValue.replaceAll("\\u000d\\u000a\s*", "")
这将替换所有以 \u000d\u000a 开头后跟 0 个无限空格的字符串。
我正在调用一个网络服务,它给我 Json 响应。这是代码
URL url = new URL(strUrl);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setDoOutput(true);
...
//get response text
BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream(),"UTF-8"));
StringBuffer response = new StringBuffer();
while ((respText = br.readLine()) != null) {
response.append(respText);
}
br.close();
retValue = response.toString();
问题是响应如下
"{\u000d\u000a \"groups\": [\u000d\u000a {\u000d\u000a \"signingGroupId\": \"323793\",\u000d\u000a \"groupName\": \"1440 Signing Group 1\",\u000d\u000a \"groupType\": \"sharedSigningGroup\",\u000d\u000a \"created\": \"3\/27\/2019 6:08:34 AM\",\u000d\u000a \"createdBy\": \"ABC Software\",\u000d\u000a \"modified\": \"4\/1\/2019 6:40:45 AM\",\u000d\u000a \"modifiedBy\": \"Corner O'Brien\"\u000d\u000a },\u000d\u000a {\u000d\u000a \"signingGroupId\": \"323794\",\u000d\u000a \"groupName\": \"1440 Another Group\",\u000d\u000a \"groupType\": \"sharedSigningGroup\",\u000d\u000a \"created\": \"3\/27\/2019 6:14:52 AM\",\u000d\u000a \"createdBy\": \"XYZ Software\",\u000d\u000a \"modified\": \"3\/27\/2019 6:16:37 AM\",\u000d\u000a \"modifiedBy\": \"XYZ Software\"\u000d\u000a }\u000d\u000a ]\u000d\u000a}"
我想从上面的回复中做出这样的回复
"{"groups":[{"signingGroupId": "323793","groupName": "1440 Signing Group 1","groupType": "sharedSigningGroup","created": "3/27/2019 6:08:34 AM","createdBy": "ABC Software","modified": "4/1/2019 6:40:45 AM","modifiedBy": "John O'Brien"},{"signingGroupId": "323794","groupName": "1440 Another Group","groupType": "sharedSigningGroup","created": "3/27/2019 6:14:52 AM","createdBy": "ABC Software","modified": "3/27/2019 6:16:37 AM","modifiedBy": "ABC Software"}]}"
也就是把后面的\u000d\u000a
和spaces
全部去掉。但不要从任何 Json 属性.
我试过了
retValue = retValue.replace("\u000d\u000a", "");
retValue = retValue.replace("\", "");
这给了我
"{ "groups": [ { "signingGroupId": "323793", "groupName": "1440 Signing Group 1", "groupType": "sharedSigningGroup", "created": "3/27/2019 6:08:34 AM", "createdBy": "ABC Software", "modified": "4/1/2019 6:40:45 AM", "modifiedBy": "John O'Brien" }, { "signingGroupId": "323794", "groupName": "1440 Another Group", "groupType": "sharedSigningGroup", "created": "3/27/2019 6:14:52 AM", "createdBy": "XYZ Software", "modified": "3/27/2019 6:16:37 AM", "modifiedBy": "XYZ Software" } ]}"
但是还有space。现在如果我使用
String replcaedNewLineAndSpaces = retValue.replaceAll("[ \t]+", "");
这一行有问题,它还从 Json 属性中删除了 spaces。
"{"groups":[{"signingGroupId":"323793","groupName":"1440SigningGroup1","groupType":"sharedSigningGroup","created":"3/27/20196:08:34AM","createdBy":"ABCSoftware","modified":"4/1/20196:40:45AM","modifiedBy":"JohnO'Brien"},{"signingGroupId":"323794","groupName":"1440AnotherGroup","groupType":"sharedSigningGroup","created":"3/27/20196:14:52AM","createdBy":"XYZSoftware","modified":"3/27/20196:16:37AM","modifiedBy":"XYZSoftware"}]}"
查看 "groupName": "1440 Signing Group 1"
的 groupName。现在变成
1440SigningGroup1
。其他属性也类似。
有没有它保持 Json 字符串不变,但删除它后面的 \u000d\u000a
和 spaces
。所以最后的回复变成
"{"groups":[{"signingGroupId": "323793","groupName": "1440 Signing Group 1","groupType": "sharedSigningGroup","created": "3/27/2019 6:08:34 AM","createdBy": "ABC Software","modified": "4/1/2019 6:40:45 AM","modifiedBy": "John O'Brien"},{"signingGroupId": "323794","groupName": "1440 Another Group","groupType": "sharedSigningGroup","created": "3/27/2019 6:14:52 AM","createdBy": "ABC Software","modified": "3/27/2019 6:16:37 AM","modifiedBy": "ABC Software"}]}"
谢谢
如评论中所述,创建 POJO class 并解析 JSON 将是最佳且安全的。 (我觉得最常用的库是GSon library)
但是,如果您坚持要删除空格,请使用简单的正则表达式:
retValue.replaceAll("\\u000d\\u000a\s*", "")
这将替换所有以 \u000d\u000a 开头后跟 0 个无限空格的字符串。