2017-07-31 81 views
2

我得到的JSON對象我的MongoDB與virustotal API 這是存儲在MongoDB中對象JSON對象的模樣:地圖JSON嵌套對象從MongoDB中到Java

{ 
"_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對象,以便對返回的結果進行操作。

回答

1

我打電話給您的主要模型掃描。您可以使用以下屬性創建一個POJO(讓我們稱之爲掃描儀):
scannerName,檢測到的版本,結果,更新;

Scanner.java

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

Scan.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> 
+1

我對你提出的建議有點困惑,因爲我說有很多掃描儀,如何將它們中的每一個存儲在列表中,你能否提供一個例子,我看起來似乎無法瞭解你的答案,謝謝 – git1235

+0

我會試試看,謝謝 – git1235

3

你需要爲了解析創建兩個Java類來自Mongo的Json,假設頭等名稱"CollectionReceived" 二級名稱"Result" 在CollectionReceived類中您需要聲明成員

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

在結果類,你需要聲明會員

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; 

,不要忘記你的控制器上使用@RestController,你會很容易解析JSON,並得到所有你需要的值。

+0

我不太明白你想說什麼,爲什麼我要添加'@ RestController' – git1235

+0

假設我想獲得'version' 'BKav',我怎麼弄到的? – git1235

+0

Bkav是HashMap,你可以根據它的鍵值得到它的值,並且你的case鍵是version –