gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 10:58:21 24 4
gpt4 key购买 nike

您好,我一直在尝试使用正则表达式来替换 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/

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