C ++ / JSON Допускается только один элемент верхнего уровня - PullRequest
0 голосов
/ 30 марта 2020

Похоже, я пишу свои объекты неправильно, но я просмотрел много примеров, и у меня все еще возникла та же проблема. Причина, по которой я делаю Staff + StaffID, заключается в том, чтобы я мог ссылаться на этот объект, если это имеет смысл. Сведения об объекте json зависят от того, что пользователь вводит

Я использую библиотеку nlohmann / json .hpp

    staff = {"Staff " + staffID, {
        {"First Name", first_name},
        {"Last Name", last_name},
        {"Age", age},
        {"StaffID", staffID},
        {"Phone", staff_phone},
        {"Skill 1", skill_1},
        {"Skill 2", skill_2},
        {"Skill 3", skill_3}
    } };

myFile << setw(4) << staff << endl;
myFile.close();

И результат в моем json файле, с верхней записью в порядке:

[
    "Staff 1",
    {
        "Age": 44,
        "First Name": "John",
        "Last Name": "Smith",
        "Phone": "97345345",
        "Skill 1": "Dogs",
        "Skill 2": "Vet",
        "Skill 3": "Grooming",
        "StaffID": "1"
    }
]
[
    "Staff 2",
    {
        "Age": 38,
        "First Name": "Jane",
        "Last Name": "Smith",
        "Phone": "9835735",
        "Skill 1": "Cats",
        "Skill 2": "Surgery",
        "Skill 3": "Grooming",
        "StaffID": "2"
    }
]

Обновлено: Подробнее Функция находится в классе, эта функция вызывается внутри пока l oop для меню, которое позволяет пользователю добавлять персонал, когда пользователь выбирает «Добавить персонал» функцию add_info_staff в классе.

class infoStaff
{
protected:


    json staff;
    char first_name[50];
    char last_name[50];
    int age;
    string staffID;
    string staff_phone;
    string skill_1;
    string skill_2;
    string skill_3;




public:
    void add_info_staff(void)
    {

        ofstream myFile("staff_j.json", ios::app);


        cout << "Please enter the first name:  " << endl;
        cin >> first_name;

        cout << "Please enter the last name:  " << endl;
        cin >> last_name;

        cout << "Please enter the age:  " << endl;
        cin >> age;

        cout << "Please enter the staff ID:  " << endl;
        cin >> staffID;

        cout << "Please enter the staff's phone number:  " << endl;
        cin >> staff_phone;

        cout << "Please enter skill 1 :  " << endl;
        cin >> skill_1;

        cout << "Please enter skill 2 :  " << endl;
        cin >> skill_2;

        cout << "Please enter skill 3 :  " << endl;
        cin >> skill_3;

        staff = {"Staff " + staffID, {
            {"First Name", first_name},
            {"Last Name", last_name},
            {"Age", age},
            {"StaffID", staffID},
            {"Phone", staff_phone},
            {"Skill 1", skill_1},
            {"Skill 2", skill_2},
            {"Skill 3", skill_3}
        } };

    myFile << setw(4) << staff << endl;
    myFile.close();

    }
};

1 Ответ

0 голосов
/ 30 марта 2020

Вы не можете просто вывести несколько массивов в файл и ожидать, что это будет действительный документ JSON. Документ JSON должен иметь одно значение верхнего уровня, например,

[
[
    "Staff 1",
    {
        "Age": 44,
        "First Name": "John",
        "Last Name": "Smith",
        "Phone": "97345345",
        "Skill 1": "Dogs",
        "Skill 2": "Vet",
        "Skill 3": "Grooming",
        "StaffID": "1"
    }
],
[
    "Staff 2",
    {
        "Age": 38,
        "First Name": "Jane",
        "Last Name": "Smith",
        "Phone": "9835735",
        "Skill 1": "Cats",
        "Skill 2": "Surgery",
        "Skill 3": "Grooming",
        "StaffID": "2"
    }
]
]

будет правильным, поскольку теперь у вас есть один массив на верхнем уровне.

Я не могу сказать вам, что вы действительно ищете, но вам нужно придумать такую ​​структуру и использовать API соответствующим образом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...