gpt4 book ai didi

java - 用正则表达式替换部分字符串

转载 作者:行者123 更新时间:2023-12-01 20:20:56 24 4
gpt4 key购买 nike

我的字符串输入类似于:

{"key1":"value1","key2":"{\"key2_1\":\"123\",\"key2_2\":\"456\",\"key2_3\":\"33333\"}"}

上述 JSON 中的值字段可以包含 "\ 等字符。为了您的方便,这里是格式化版本:

{
"key1": "value1",
"key2": "{\"key2_1\":\"123\",\"key2_2\":\"456\",\"key2_3\":\"33333\"}"
}

我想使用Gson将String转换为Foo对象:

class Foo {
private String key1;
private Bar key2;
...
}

class Bar {
private String key2_1;
private String key2_2;
private String key2_3;
...
}

这是我的正则表达式:

String regexp = "\\{[\"a-zA-Z-0-9:,\\\\]*\"key2\":\"\\{\\\\\"key2_1\\\\\":\\\\\"[a-zA-Z0-9]*\\\\\",\\\\\"key2_2\\\\\":\\\\\"[a-zA-Z0-9]*\\\\\",\\\\\"key2_3\\\\\":\\\\\"[a-zA-Z0-9]*\\\\\"\\}\"\\}[\"a-zA-Z-0-9:,\\\\]*";
Pattern pattern = Pattern.compile(regexp);
Matcher matcher = pattern.matcher(text);
if(matcher.matches()) {
... // TODO: Replace all "{, \" and }" but How???
}

如何使用此正则表达式将所有 "{, \".and "} 替换为 {, ", } 而不更改 JSON 中的键和值?

找到子字符串并使用String的replace方法将是我的备用解决方案。

同样,我的最终目标是将输入字符串解析为我的 Foo 对象。除了使用正则表达式之外,还有更好的方法吗?

谢谢!

最佳答案

黄金法则是不要对此类事情使用正则表达式:)我的建议是多看看 JSON 映射器,例如 Jackson

您需要做的就是:

  1. 在您的示例中修复 JSON,这里嵌套不需要双引号{
  2. 添加 Jackson 依赖项

    <dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>${jackson.version}</version>
    </dependency>
  3. 创建ObjectMapper并让他处理您的JSON字符串

    ObjectMapper mapper = new ObjectMapper();
    Foo foo = mapper.readValue( "{\"key1\":\"value1\",\"key2\":"
    + " {\"key2_1\":\"123\",\"key2_2\":\"456\",\"key2_3\":\"33333\"}}", Foo.class);
    System.out.println(foo.toString());

希望对你有帮助!

关于java - 用正则表达式替换部分字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44725528/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com