我需要能够将数据库中的sql调用解析为json,然后将解析后的JSON字符串中的关键字段与json文件(技术上是BOD - Business Object Document)进行比较,如果它们匹配则需要用JSON字符串覆盖json文件的匹配值。
e.g。我将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,
}
}
并覆盖匹配键的值,结尾文件如下所示:
{
"partyInfo": {
"PARTY_NAME": "NORWAY",
"STATE": "OSLO",
"PARTY_ID": "92706031",
"SIC_CODE": null,
}
}
到目前为止,我已经能够解析对JSON的SQL调用(现在使用Jackson但我愿意在需要时进行更改)但我不知道如何与文件进行比较并仅覆盖数据匹配的值。
答案 0 :(得分:0)
我可能误解了你想要做的事情,但听起来你可以在代表文件中的JSON的for
中的键上使用Map
循环,比较值对于数据库中的那些,更改任何不匹配的,然后将文件写回:
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
答案 1 :(得分:0)
最简单的解决方案是将这些文件解析为java对象(再次使用Jackson),比较对象,然后保存需要保存的内容。
否则,您将有效地制作类似patch工具的内容。
答案 2 :(得分:0)
看起来树模型允许您更新节点。
这是一个例子: http://wiki.fasterxml.com/JacksonInFiveMinutes#Tree_Model_Example