2013-07-31 74 views
0

我需要能夠將數據庫中的sql調用解析爲json,然後將解析的JSON字符串中的關鍵字段與json文件(技術上它是BOD --Business Object Document)進行比較,如果它們匹配,那麼我需要用JSON字符串的值覆蓋json文件的匹配值。無論如何覆蓋在Java中的JSON文件的部分?

例如我分析SQL調用此

{ 
"partyInfo": { 
    "PARTY_NAME": "NORWAY", 
    "STATE": "OSLO", 
    "PARTY_ID": "92706031", 
    "VERTICAL_MARKET_TOP_DESC": null, 
    "ATTRIBUTE20": null, 
    "DUNS_NUMBER": null, 
    "SIC_CODE": null, 
    "EMPLOYEES_TOTAL": null, 
    "ALL_ADDRESS_LINES": "HOMMENKOLLEN 23 TOPPEN 12", 
    "CITY": "OSLO", 
    "POSTAL_CODE": "1255", 
    "COUNTRY_NAME": "NORWAY", 
    "KNOWN_AS": null 
} 

}

,然後與之比較的,看起來像這樣的文件:

{ 
"partyInfo": { 
    "PARTY_NAME": string, 
    "STATE": string, 
    "PARTY_ID": number, 
    "SIC_CODE": string, 
} 

}

和匹配鍵ST改寫值結尾文件如下所示:

{ 
"partyInfo": { 
    "PARTY_NAME": "NORWAY", 
    "STATE": "OSLO", 
    "PARTY_ID": "92706031", 
    "SIC_CODE": null, 
} 

}

到目前爲止,我已經能夠解析SQL調用JSON(現在使用Jackson,但我願意改變,如果需要的話),但我不知道如何與文件進行比較,只覆蓋匹配的數據值。

+1

我想你想的BOD文件解碼爲對象,通過對象的屬性迭代,比較它們對DB結果與相同的密鑰和覆蓋值BOD,然後將BOD編碼回JSON以保存它。我沒有看到任何理由實際上將數據庫結果編碼爲JSON,除非由於某些原因需要將這些數據保存在JSON中。 –

回答

0

我可能會誤解你想要做的事情,但是聽起來好像你可以在Map的密鑰上使用for循環來代表文件中的JSON,將值與數據庫中的值進行比較,更改任何不匹配,然後寫入文件退了出來:

for(String key: fileJson.keys()) 
    if(!fileJson.get(key).equals(sqlJson.get(key))) 
     fileJson.put(key, sqlJson.get(key)); 

// write fileJson back out to the correct file through Jackson 
0

最簡單的解決辦法是將分析這些文件爲Java對象(再次使用傑克遜),比較的對象,然後保存,你需要什麼保存。

否則,您將有效地製作類似patch的工具。