2013-07-12 4 views
-1

j'ai stocké des objets JSON dans les collections MongoDB et en utilisant jar Mongo et Java je l'ai fait la recherche en texte intégral, et je suis EXTRACTION un de mes champs DB en utilisant ci-dessous le code:Comment diviser objet JSON extrait de MongoDB en utilisant java

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

Résultat:

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

Mon exigence est de diviser tous les mots et supprimer les doublons. J'ai besoin de la sortie suivante:

pdf 
java 
c++ 
c 
perl 

Pouvez-vous suggérer un moyen de l'obtenir?

+0

Ce JSON n'est pas valide. N'y a-t-il aucune virgule entre les sous-réseaux? – Jonathan

+0

Je ne sais pas à quoi ressemble votre schéma, mais 'distinct' peut être une option raisonnable. http://docs.mongodb.org/manual/reference/command/distinct/ – WiredPrairie

Répondre

0

utilisation comme ça dans 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 
} 
+0

Salut, merci pour la réponse, mais ai-je besoin d'importer n'importe quel gson jars, parce que je reçois erreur à "elem" – user2545106

+0

Le code ci-dessus sera pas de compilation car 'elem' n'a pas encore été initialisé. Et oui, vous aurez besoin du pot GSON sur votre chemin de classe – reto

+0

@ user2545106 mis à jour le code – John

0

Diverses bibliothèques telles que GSON vous aideront à le faire.

Exemple ints:

int[] ints2 = gson.fromJson("[1,2,3,4,5]", int[].class); 

Votre exemple est résolu par:

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); 
1

Comme votre JSON est invalide, vous pourriez analyser votre sortie en utilisant un motif regex pour extraire les valeurs. Ceux-ci peuvent ensuite être ajoutés à un Set afin de supprimer les doublons, .: par exemple

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"]; 

Vous devrez peut-être utiliser une implémentation Set différente si une sorte de commande est important pour vous.

Alternativement, si votre JSON est valide, vous pouvez simplement faire:

final String[][] result = new Gson().fromJson(tags2, String[][].class); 

Et puis ajoutez le contenu de result à un Set.