检查 jsonNode 是否包含特定键,然后在存在时提取其值

2 java json jsonnode

我有这个字符串,我使用 ObjectMapper 将其覆盖到 jsonNode。然后我尝试在这个 jsonNode 中查找特定的键,所以我使用了“.has”,但它不起作用!!\n这是我所做的:

\n
{ \n    "links": {\n        "data": {\n            "self": {\n                "body": "", \n                "content_type": "",\n                "href": "/api/v2/nodes",\n                "method": "POST", \n                "name": "" \n            } \n        }\n    },\n    "results": { \n        "data": {\n            "properties": { \n                "container": true,\n                "container_size": 0,\n                "create_date": "2020-06-22T16:19:07",\n                "create_user_id": 1000,\n                "description": ""\n                "description_multilingual": { \n                    "en": "",\n                    "fr_FR": "" \n                },\n                "external_create_date": null,\n                "external_identity": "",\n                "external_identity_type": "",\n                "external_modify_date": null,\n                "external_source": "",\n                "favorite": false,\n                "id": 276625,\n                "mime_type": null,\n                "modify_date": "2020-06-22T16:19:07",\n                "modify_user_id": 1000,\n                "name": "mar",\n                "name_multilingual": {\n                    "en": "mar",\n                    "fr_FR": ""\n                },\n                "owner": "Admin",\n                "owner_group_id": 1001,\n                "owner_user_id": 1000,\n                "parent_id": 2000,\n                "permissions_model": "advanced",\n                "reserved": false,\n                "reserved_date": null,\n                "reserved_shared_collaboration": false,\n                "reserved_user_id": 0,\n                "size": 0,\n                "size_formatted": "0 El\xc3\xa9ments",\n                "type": 0,\n                "type_name": "Dossier",\n                "versions_control_advanced": false,\n                "volume_id": -2000 \n            } \n        } \n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

我想测试它是否有“id”键(它实际上存在于第 31 行),所以我使用了.has()如何检查 json 键是否存在?

\n
ObjectMapper mapper = new ObjectMapper();    \nJsonNode rootNode= mapper.readTree(body);\n         if(rootNode.has("id")){\n            System.out.println(true);\n         }\n        else{\n            System.out.println(false);\n        }\n
Run Code Online (Sandbox Code Playgroud)\n

但它总是显示我“假”作为输出!

\n

Ale*_*nko 9

如果您尝试查找放置在嵌套对象内的键,则可以使用 findValue(String key)在给定键未找到值时返回 null 的方法:

ObjectMapper mapper = new ObjectMapper();
JsonNode rootNode= mapper.readTree(json);

String[] keys = {
    "id", "create_date", "versions_control_advanced", "name", "nofield"
};

for (String key : keys) {
    JsonNode value = rootNode.findValue(key);
    System.out.printf("Key %s exists? %s --> value=%s%n", key, value != null,
                    value == null ? null : value.asText());

}
Run Code Online (Sandbox Code Playgroud)

输出:

Key id exists? true --> value=276625
Key create_date exists? true --> value=2020-06-22T16:19:07
Key versions_control_advanced exists? true --> value=false
Key name exists? true --> value=
Key nofield exists? false --> value=null
Run Code Online (Sandbox Code Playgroud)