无论如何要在java中覆盖json文件的一部分?

时间:2013-07-31 21:18:57

标签: java json

我需要能够将数据库中的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但我愿意在需要时进行更改)但我不知道如何与文件进行比较并仅覆盖数据匹配的值。

3 个答案:

答案 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