Как проверить, присутствует ли ключ во вложенном json в c ++, используя nlohmann - PullRequest
3 голосов
/ 18 июня 2019

У меня есть данные json ниже:

{
    "images": [
        {
            "candidates": [
                {
                    "confidence": 0.80836,
                    "enrollment_timestamp": "20190613123728",
                    "face_id": "871b7d6e8bb6439a827",
                    "subject_id": "1"
                }
            ],
            "transaction": {
                "confidence": 0.80836,
                "enrollment_timestamp": "20190613123728",
                "eyeDistance": 111,
                "face_id": "871b7d6e8bb6439a827",
                "gallery_name": "development",
                "height": 325,
                "pitch": 8,
                "quality": -4,
                "roll": 3,
                "status": "success",
                "subject_id": "1",
                "topLeftX": 21,
                "topLeftY": 36,
                "width": 263,
                "yaw": -34
            }
        }
    ]
}

Мне нужно проверить, присутствует ли subject_id в данных json выше или нет.Для этого я сделал ниже:

auto subjectIdIter = response.find("subject_id");
if (subjectIdIter != response.end())
{
    cout << "it is found" << endl;

}
else
{
    cout << "not found " << endl;
}

Как мне это решить.Спасибо

Ответы [ 3 ]

1 голос
/ 30 июня 2019

Существует функция-член contains, которая возвращает bool, указывающий, существует ли данный ключ в значении JSON.

Вместо

auto subjectIdIter = response.find("subject_id");
if (subjectIdIter != response.end())
{
    cout << "it is found" << endl;

}
else
{
    cout << "not found " << endl;
}

Вы можете написать:

if (response.contains("subject_id")
{
    cout << "it is found" << endl;

}
else
{
    cout << "not found " << endl;
}
0 голосов
/ 18 июня 2019

Candidates - это массив, поэтому вам просто нужно перебрать объекты и вызвать find.

bool found = false;
for( auto c: response.at("images").at("candidates") ) {
    if( c.find("subject_id") != c.end() ) {
        found = true;
        break;
    }
}
0 голосов
/ 18 июня 2019

используйте поиск, включая изображения и кандидатов, и проверьте:

if (response["images"]["candidates"].find("subject_id") != 
           response["images"]["candidates"].end())
...