字符串如下。
"{
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,地址,性别。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=long\n"
+ " },\n"
+ " firstname={\n"
+ " type=text, fields={\n"
+ " keyword={\n"
+ " ignore_above=256, type=keyword\n"
+ " }\n"
+ " }\n"
+ " },\n"
+ " accountnumber={\n"
+ " type=long\n"
+ " },\n"
+ " address={\n"
+ " type=text, fields={\n"
+ " keyword={\n"
+ " ignore_above=256, type=keyword\n"
+ " }\n"
+ " }\n"
+ " },\n"
+ " gender={\n"
+ " type=text, fields={\n"
+ " keyword={\n"
+ " ignore_above=256, type=keyword\n"
+ " }\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]