java - 使用正则表达式操作 JSON 字符串

标签 java json regex

您好,我一直在尝试使用正则表达式来替换 JSON 字符串键名称中的点 (.)。我不想使用 JSONObject 将字符串转换为 JSON。

对于 JSON 字符串,例如:

{
    "data": {
        "property": "0",
        "property_value": "0",
        "property": "0",
        "pro.per.ty": "0",
        "pr.op.er.ty": "0.0",
        "property": "0.0",
        "proper_ty": "0.0",
        "group": "oneGroup",
        "newprop": "0",
        "total": {
            "0": "0",
            "99": "0",
            "100": "0",
            "25": "0",
            "90": "0",
            "50": "0",
            "95": "0",
            "99.5": "0",
            "75": "0"
        },
        "requests": "0"
    }
}

我希望最终的字符串是

{
    "data": {
        "property": "0",
        "property_value": "0",
        "property": "0",
        "pro_per_ty": "0",
        "pr_op_er_ty": "0.0",
        "property": "0.0",
        "proper_ty": "0.0",
        "group": "oneGroup",
        "newprop": "0",
        "total": {
            "0": "0",
            "99": "0",
            "100": "0",
            "25": "0",
            "90": "0",
            "50": "0",
            "95": "0",
            "99_5": "0",
            "75": "0"
        },
        "requests": "0"
    }
}

该解决方案需要具有低于 10 毫秒的高性能。

我可以使用表达式 "(\w*\.\w*)+\": 捕获带有 (.) 的键,但我无法正确获取子组来执行替换。

最佳答案

您还可以考虑以下基于非正则表达式的方法:

public static String cleanse( String str )
{
    String updated = Arrays.stream( str.split( "," ) ).map( value -> {
        if ( !value.contains( ":" ) )
        {
            return value;
        }
        String[] pair = value.split( ":" );
        StringBuilder sb = new StringBuilder();
        int i = 0;
        while ( i < pair.length - 1 )
        {
            sb.append( pair[i] ).append( ":" );
            i++;
        }
        return sb.toString().replace( '.', '_' ) + pair[i];
    } ).collect( Collectors.joining( "," ) );

    return updated;
}

由于它不使用模式匹配,因此它应该是高性能的。

关于java - 使用正则表达式操作 JSON 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47149732/

相关文章:

python - 使用正则表达式查找Python中两个定义标签之间多行字符串的所有出现

javascript - 如何使用 RegEx 获取 URL 的特定部分?

regex - perl 中的正则表达式是否比 Java 或其他语言更快?

java - Collections.binarySearch 的通用列表参数错误

java - 在 Java JDBC 中将行插入到 ResultSet 中而不使用 update 方法

java - 使用Maven for Java程序在hdfs上写入时的Hadoop错误

json - Swift:如何将可编码类型作为函数输入传递以编码或解码 json

json - Golang 创建 json 数组

java - Spring Boot方法验证

javascript - 将js文件中的数组Fatch到php中,然后编码成json