什么是分析和安全检查杰克逊JsonNode的正确方法?

时间:2017-09-19 11:58:01

标签: java json jackson

我需要分析和安全检查数据集,假设使用相同的格式。例如,所有数据集应如下所示:

{
    "firstValue":0,
    "firstElement": {
        "secondValue":1,
        "array": [
            {
                "thirdValue": 2,
                "secondElement": {
                    "fourthValueOne": 3,
                    "fourthValueTwo": 4
                }
            }
            {
                "thirdValue": 5,
                "secondElement": {
                    "fourthValueOne": 6,
                    "fourthValueTwo": null
                }
            }
        ]
    }   
}

假设所有字段始终存在 - 如果未指定某些数据,则相应字段的值仅为" null",例如:所有数据集包含" secondValue",但它可能为null。另一个例子:所有数据集都包含" array",但列表可能为空。第三个例子:如果数据集包含" array"中的元素,则该元素包含" thirdValue"和" secondElement",而" secondElement"包含" fourthValueOne"和" fourthValueTwo"。

简而言之,下面的代码应始终用于检索任何数据集中的所有数据(将其视为伪代码,而不是实际代码):

JsonNode root = builtHere();
JsonNode firstValueNode = root.get("firstValue");
JsonNode firstElementNode = root.get("firstElement");

JsonNode secondValueNode = firstElementnode.get("secondValue");
JsonNode arrayNode = firstElementnode.get("array");

for (JsonNode arrayElement : arrayNode) {
    JsonNode thirdValueNode = arrayElement.get("thirdValue");
    JsonNode secondElementNode = arrayElement.get("secondElement");

    JsonNode fourthValueOne = secondElementNode.get("fourthValueOne");
    JsonNode fourthValueTwo = secondElementNode.get("fourthValueTwo");
}

这当然是一个非常简单的例子。我使用的真实数据集更大,更复杂,有嵌套列表等。

我需要做的是分析所有数据,这意味着从json树中提取所有数据并检查json树是否实际遵循数据集格式(例如" secondValue"总是必须存在。)

我可以在示例代码中执行上面的操作来提取数据,并检查每个字段是否存在,例如root.has(" firstValue"),但这似乎是一种非常丑陋的方式,特别是在迭代嵌套循环时。

有关如何以更智能的方式解决这个问题的任何建议吗?

其他问题:如何使用JsonNode获取从当前JsonNode到root的路径,例如/ firstElement /阵列/ 0 / secondElement / fourthElementOne?

0 个答案:

没有答案