如何使用regex从以下字符串中以对象格式(不使用POJO)从给定字符串中获取字段名称



字符串如下:

"{
account_number={
type=long
},
firstname={
type=text, fields={
keyword={
ignore_above=256, type=keyword
}
}
},
accountnumber={
type=long
},
address={
type=text, fields={
keyword={
ignore_above=256, type=keyword
}
}
},
gender={
type=text, fields={
keyword={
ignore_above=256, type=keyword
}
}
}
}"

我只需要获得这些字段的名称,即account_number、firstname、accountnumber、address和gender。Pojo类在这里不起作用,因为对象内部的内容是不固定的。reg ex可能有效。有什么建议吗?

这里我已经将ur字符串转换为JSON,然后检索所有密钥

import java.util.HashSet;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.json.JSONObject;

public class SOTest {
public static void main(String args[]) {
Set<String> keywords = new HashSet<String>();
final String regex = "[a-z]\w*";
String string = "{n"
+ "    account_number={n"
+ "    type=longn"
+ "    },n"
+ "    firstname={n"
+ "    type=text, fields={n"
+ "    keyword={n"
+ "    ignore_above=256, type=keywordn"
+ "            }n"
+ "        }n"
+ "    },n"
+ "    accountnumber={n"
+ "    type=longn"
+ "    },n"
+ "    address={n"
+ "    type=text, fields={n"
+ "    keyword={n"
+ "    ignore_above=256, type=keywordn"
+ "            }n"
+ "        }n"
+ "    },n"
+ "    gender={n"
+ "    type=text, fields={n"
+ "    keyword={n"
+ "    ignore_above=256, type=keywordn"
+ "            }n"
+ "        }n"
+ "    }n"
+ "}";
final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE);
final Matcher matcher = pattern.matcher(string);
while(matcher.find()) {
String gp = matcher.group();
keywords.add(gp);
}
for (String keyword : keywords) {
string = string.replace(keyword, """+keyword+""");
}
string = string.replace("=", ":");
System.out.println(string);
JSONObject jsonObject = new JSONObject(string);
System.out.println(jsonObject.keySet());
}
}

输出

[account_number, firstname, accountnumber, address, gender]

最新更新