mappez l'objet imbriqué json de mongodb vers java


J'obtiens un objet json sur mon mongodb avec l'API virustotal Voici à quoi ressemble un objet json stocké dans un objet mongodb:

{
"_id" : ObjectId("597cd2f871eac714388b2f7f"),
"results" : {
    "scans" : {
        "Bkav" : {
            "detected" : true,
            "version" : "1.3.0.8042",
            "result" : "W32.HfsAutoB.971A",
            "update" : "20160706"
        },
        "TotalDefense" : {
            "detected" : false,
            "version" : "37.1.62.1",
            "result" : null,
            "update" : "20160706"
        },
        "MicroWorld-eScan" : {
            "detected" : true,
            "version" : "12.0.250.0",
            "result" : "Packer.Expressor.B",
            "update" : "20160706"
        },
        "nProtect" : {
            "detected" : true,
            "version" : "2016-07-06.01",
            "result" : "Packer.Expressor.B",
            "update" : "20160706"
        },
        "ALYac" : {
            "detected" : false,
            "version" : "1.0.1.9",
            "result" : null,
            "update" : "20160706"
        },           
        "TrendMicro" : {
            "detected" : true,
            "version" : "9.740.0.1012",
            "result" : "TROJ_GEN.R047C0CAP16",
            "update" : "20160706"
        },
        "McAfee-GW-Edition" : {
            "detected" : true,
            "version" : "v2015",
            "result" : "BehavesLike.Win32.Flyagent.cc",
            "update" : "20160706"
        },
        "Sophos" : {
            "detected" : true,
            "version" : "4.98.0",
            "result" : "W32/Pidgeon-A",
            "update" : "20160706"
        },
        "Cyren" : {
            "detected" : true,
            "version" : "5.4.16.7",
            "result" : "W32/SysVenFak.A.gen!Eldorado",
            "update" : "20160706"
        },
        "Microsoft" : {
            "detected" : true,
            "version" : "1.1.12902.0",
            "result" : "Backdoor:Win32/Delf.SJ",
            "update" : "20160706"
        },
        "AegisLab" : {
            "detected" : true,
            "version" : "4.2",
            "result" : "Backdoor.W32.BlackHole.acx!c",
            "update" : "20160706"
        },            
        "Qihoo-360" : {
            "detected" : false,
            "version" : "1.0.0.1120",
            "result" : null,
            "update" : "20160706"
        }
    },
    "scan_id" : "2ad6e0aad0b40f152f234787daa4afb87538f3278f5c8f815d53ef46d5eea4ac-1467833095",
    "sha1" : "c5dcd5526ac5330ad1e9fad51488718329fdb697",
    "resource" : "0a60424e0967b6cfc172dac82e10a2fe",
    "response_code" : 1,
    "scan_date" : "2016-07-06 19:24:55",
    "permalink" : "https://www.virustotal.com/file/2ad6e0aad0b40f152f234787daa4afb87538f3278f5c8f815d53ef46d5eea4ac/analysis/1467833095/",
    "verbose_msg" : "Scan finished, information embedded",
    "total" : 54,
    "positives" : 41,
    "sha256" : "2ad6e0aad0b40f152f234787daa4afb87538f3278f5c8f815d53ef46d5eea4ac",
    "md5" : "0a60424e0967b6cfc172dac82e10a2fe"
},
"response_code" : 200
}

Comme vous pouvez le voir l'objet json est trop compliqué pour obtenir juste valeur de, C'est ce que j'ai essayé jusqu'à présent :

MongoClient mongo = new MongoClient("localhost", 27017);
        MongoDatabase database1 = mongo.getDatabase(db);
        MongoCollection<Document> collection1 = database1.getCollection(col);
        try (MongoCursor<Document> cursor = collection1.find().iterator()){

            while (cursor.hasNext()){
                Document doc = cursor.next();
                List list = new ArrayList(doc.values());
                System.out.println(list.get(1));
            }

        }

Je pensais qu'il y avait peut-être un moyen de mapper tout ce json à une classe java, le problème principal est avec le "scans" car il existe de nombreux scanners différents et il n'est pas optimisé pour créer un modèle de classe java pour chacun d'eux, Ma question est de savoir comment puis-je stocker directement mes objets json dans un objet java afin d'opérer sur les résultats renvoyés.

Author: git1235, 2017-07-31

2 answers

Vous devez créer deux classes java afin d'analyser Json de venir de Mongo, Supposons le nom de la première classe "CollectionReceived" Nom de la deuxième classe "Result" Dans la classe CollectionReceived, vous devez déclarer des membres

public String _id;
public String response_code;
public Result result;

Dans la classe de résultats, vous devez déclarer des membres

Map<String,Map<String,Map<String,Map<String,Object>>>> results=new HashMap<String,Map<String,Map<String,Map<String,Object>>>>();,
public String scan_id;
public String sha1;
public String resource;
public String response_code;
public String scan_date;
public String permalink;
public String verbose_msg;
public String total;
public String positives;
public String sha256;
public String md5;

Et n'oubliez pas d'utiliser @RestController sur votre contrôleur, Vous analyserez facilement Json et obtiendrez toutes les valeurs dont vous avez besoin.

 3
Author: Shubham kapoor, 2017-07-31 13:06:47

J'appelle votre modèle principal comme Scan. Vous pouvez créer un POJO (appelons-le Scanner) avec les attributs ci-dessous:
scannerName, détecté, la version, le résultat, la mise à jour;

Scanner.java

private String scannerName;
private String detected;
private String version;
private String result;
private String update;

Balayage.java

private String scan_id;
private List<Scanner> = new ArrayList<Scanner>();
private String sha1;
private String resource;
......
........

Donc, votre modèle de numérisation a maintenant une liste de scanners.

Utiliser morphia c'est quelque chose comme:

@Embedded
private List<Scanner> scanner;

Si vous n'utilisez aucun wrapper autour du pilote java, essayez simplement

private List<BasicDBObject>
 1
Author: Probal, 2017-07-31 06:15:24