我在MongoDB集合中存储了一些JSON对象并使用Mongo jar和Java我进行了全文搜索,我使用下面的代码提取了一个数据库字段:
String tags2=dbo.getString("Tags");
结果:
[["pdf","java","c++"]["perl","pdf","c"]["java","c++"]]
我的要求是拆分所有单词并删除重复项。我需要以下输出:
pdf
java
c++
c
perl
你能建议一种方法来获得这个吗?
答案 0 :(得分:1)
由于您的JSON无效,您可以使用正则表达式模式解析输出以提取值。然后可以将这些添加到Set
以删除重复项,例如:
final Pattern p = Pattern.compile("\"(.*?)\"");
final Matcher m = p.matcher(tags2);
final Set<String> unique = new HashSet<String>();
while (m.find()) {
unique.add(m.group());
}
assert unique == ["perl", "java", "c", "c++", "pdf"];
如果某种排序对您很重要,您可能需要使用其他Set
实现。
或者,如果您的JSON有效,您可以执行以下操作:
final String[][] result = new Gson().fromJson(tags2, String[][].class);
然后将result
的内容添加到Set
。
答案 1 :(得分:0)
GSON等各种库可以帮助您实现这一目标。
ints示例:
int[] ints2 = gson.fromJson("[1,2,3,4,5]", int[].class);
你的例子解决了:
String tags2 = "[[\"pdf\",\"java\",\"c++\"],[\"perl\",\"pdf\",\"c\"],[\"java\",\"c++\"]]";
// added commas between the arrays to make sure the JSON is valid
// your code: String tags2=dbo.getString("Tags");
Set<String> elems = new HashSet<String>();
JsonElement rootJSonElement = new JsonParser().parse(tags2);
for (JsonElement jsonElement : rootJSonElement.getAsJsonArray()) {
for (JsonElement innerJsonElement : jsonElement.getAsJsonArray()) {
elems.add(innerJsonElement.getAsString());
}
}
System.out.println(elems);
答案 2 :(得分:0)
在GSON中使用这样的
JsonArray finalResult = null;
JsonParser parser = new JsonParser();
String tags2=dbo.getString("Tags");
JsonElement elem = parser.parse(tags2);
finalResult = elem.getAsJsonArray();
for(int i=o;i<finalResult .size();i++)
{
//Get individual array and get the fields as String and store it anywhere
}