【FQA】java 代码 删除多余的开始引号,但是还需要删除多余的结束引号 以及 ,\n ,\r

176 阅读2分钟

问题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()); // 输出:李四
    }
}