java - 将 json 嵌套对象从 mongodb 映射到 java

标签 java json mongodb pojo

我使用virustotal API在我的mongodb上获取json对象 这是存储在 mongodb 对象中的 json 对象的样子:

{
"_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
}

如您所见,json 对象太复杂,无法从中获取给定值, 这是我到目前为止所尝试过的:

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

        }

我在想也许有一种方法可以将所有这些 json 映射到 java 类,主要问题是 "scans" 因为有许多不同的扫描器,并且它没有针对为每个人创建一个java类模型, 我的问题是如何将 json 对象直接存储到 java 对象中,以便对返回的结果进行操作。

最佳答案

我将您的主要模型称为 Scan。您可以创建具有以下属性的 POJO(我们称之为扫描仪):
扫描仪名称、检测到的、版本、结果、更新;

扫描仪.java

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

扫描.java

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

所以您的扫描模型现在有一个扫描仪列表。

使用吗啡就像这样:

@Embedded
private List<Scanner> scanner;

如果您没有在 java 驱动程序周围使用任何包装器,请尝试

private List<BasicDBObject>

关于java - 将 json 嵌套对象从 mongodb 映射到 java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45407722/

相关文章:

java - 我需要与许多其他对象共享一个对象——我读过关于单例的投诉,那么我应该使用什么来代替?

javascript - JSON 对象被引号分隔

java - Glassfish 和 MongoDB 连接错误 : NoClassDefFoundError

node.js - 环回和mongo中相同的 'find'查询在不同服务器中有不同的行为

java - 试图记住疯狂的java数组技巧

Java错误: Could not find or load main Class on Raspberry

java - 发布数据时出错:java.lang.RuntimeException:导出限制:仅 SunJSSE::在 jboss 服务器中

python - 使用 python 在 JSON 中查找重复项

javascript - 无法解决 Ext.ux 的依赖关系

node.js - 如何知道 mongodb 查询有多少个匹配项