问题1: java 代码 删除多余的开始引号,但是还需要删除多余的结束引号 以及 ,\n ,\r
// 删除开头和结尾的双引号
dataStr = dataStr.replaceFirst("^"", "").replaceAll(""$", "");
// 删除所有的 \n 和 \r
dataStr = dataStr.replaceAll("\\n", "").replaceAll("\\r", "");
// 移除转义的双引号
dataStr = dataStr.replace("\"", """);
问题 JSON 字符串
"{"modifyStartingTime":"2024-05-05 18:15:00","modifyEndTime":"2024-06-05 18:15:00","pageIndex":1,"pageSize":5}"
"{\n "modifyStartingTime": "2024-05-05 18:15:00",\n "modifyEndTime": "2024-06-05 18:15:00",\n "pageIndex": 1,\n "pageSize": 5\n }"
解决代码 一
public static void main(String[] args) {
String str1 = "{"corpno":"605"}";
//String str2 = ""{\n \"corpno\": \"2024\", \"modifyStartingTime\": \"2024-05-05 18:15:00\",\n \"modifyEndTime\": \"2024-06-05 18:15:00\",\n \"pageIndex\": 1,\n \"pageSize\": 5\n }"\n";
String str2 = "{\n" +
"\t"corpno": "20241",\n" +
"\t"access_token": "ba63db2ac-636915d9a5d2",\n" +
"\t"version": "1.0",\n" +
"\t"requestid": "1510284569660",\n" +
"\t"method": "consumption",\n" +
"\t"data": "" +
"}";
// 删除开头和结尾的双引号
str2 = compressedJsonStr(str2);
String id1 = matchCorpInfoByRegex(str1);
String id2 = matchCorpInfoByRegex(str2);
// String id3 = matchCorpInfoByRegex(str3);
System.out.println(id1);
System.out.println(id2);
// System.out.println(id3);
}
public static String compressedJsonStr(String body) {
// 删除开头和结尾的双引号
body = body.replaceFirst("^"", "").replaceAll(""$", "");
// 删除所有的 \n 和 \r
body = body.replaceAll("\\n", "").replaceAll("\\r", "");
// 移除转义的双引号
body = body.replace("\"", """);
//压缩字符串,去掉所有空格
//body = body.replaceAll(" ", "");
body = body.replaceAll("\n\t", "");
body = body.replaceAll("\n", "");
return GsonUtil.getGson().toJson(GsonUtil.getGson().fromJson(body, Object.class));
}
public static String matchCorpInfoByRegex(String text) {
String corpNo = "";
Pattern corpNoPattern = Pattern.compile(""corpNo"" + com.better517na.OpenAPI.aop.settlementmonitoritynew.StringUtil.CORP_MATCH_POSTFIX_STR);
Matcher matcher = corpNoPattern.matcher(text);
while (matcher.find()) {
corpNo = matcher.group(1);
if (!StringUtil.isStringParamNotLegal(corpNo)) {
break;
}
}
return corpNo;
}
解决代码 二
public static void main(String[] args) {
String dataStr =""{\n \"modifyStartingTime\": \"2024-05-05 18:15:00\",\n \"modifyEndTime\": \"2024-06-05 18:15:00\",\n \"pageIndex\": 1,\n \"pageSize\": 5\n }"";
// 删除开头和结尾的双引号
dataStr = dataStr.replaceFirst("^"", "").replaceAll(""$", "");
// 删除所有的 \n 和 \r
dataStr = dataStr.replaceAll("\\n", "").replaceAll("\\r", "");
// 移除转义的双引号
dataStr = dataStr.replace("\"", """);
// dataStr =removeExtraQuotes(dataStr);
//todo 1 加密入参 token 取企业
Object objData= GsonHelper.json2Model(dataStr, Map.class);
System.out.println(objData);
}
public static String removeExtraQuotes(String input) {
int startIndex = 0;
int endIndex = input.length() - 1;
while (startIndex < input.length() && input.charAt(startIndex) == '"') {
startIndex++;
}
while (endIndex >= 0 && input.charAt(endIndex) == '"') {
endIndex--;
}
return input.substring(startIndex, endIndex + 1).replaceAll(",\n", "").replaceAll("\n", "").replaceAll("\r", "");
}
public static String removeEscapeCharacters(String str) {
return str.replace("\"", """)
.replace("\\", "\");
}
问题2: objectMapper.readValue(body, targetTypeClass); 会将非驼峰字段过滤掉 如何处理
使用@JsonProperty注解来指定字段名。首先,需要在目标类型的属性上添加@JsonProperty注解,并指定与JSON中的字段名相匹配的名称。然后,在使用ObjectMapper进行反序列化时,它将使用指定的名称而不是默认的驼峰命名规则。
例如,假设有以下JSON字符串:
json复制代码运行
{
"first_name": "张三",
"last_name": "李四"
}
可以创建一个名为Person的类,并在其属性上添加@JsonProperty注解:
java复制代码运行
import com.fasterxml.jackson.annotation.JsonProperty;
public class Person {
@JsonProperty("first_name")
private String firstName;
@JsonProperty("last_name")
private String lastName;
// getter和setter方法
}
然后,可以使用ObjectMapper将JSON字符串反序列化为Person对象:
java复制代码运行
import com.fasterxml.jackson.databind.ObjectMapper;
public class Main {
public static void main(String[] args) throws Exception {
String json = "{"first_name":"张三","last_name":"李四"}";
ObjectMapper objectMapper = new ObjectMapper();
Person person = objectMapper.readValue(json, Person.class);
System.out.println(person.getFirstName()); // 输出:张三
System.out.println(person.getLastName()); // 输出:李四
}
}