如何使用java分割从mongodb中提取的json对象

时间:2013-07-12 11:31:31

标签: java json mongodb split

我在MongoDB集合中存储了一些JSON对象并使用Mongo jar和Java我进行了全文搜索,我使用下面的代码提取了一个数据库字段:

String tags2=dbo.getString("Tags");

结果:

[["pdf","java","c++"]["perl","pdf","c"]["java","c++"]]

我的要求是拆分所有单词并删除重复项。我需要以下输出:

pdf
java
c++
c
perl

你能建议一种方法来获得这个吗?

3 个答案:

答案 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
}