получить доступ к json значениям массива в c ++ - PullRequest
0 голосов
/ 29 января 2020

Я новичок в c ++ и пытаюсь использовать библиотеку nlohmann, и я довольно застрял. Я хочу изменить массив объектов из json.

json = { "a": "xxxx",
         "b": [{ "c": "aaa",
                 "d": [{ "e": "yyy" },
                       { "e": "sss", "f": "fff" }]}]}

, теперь я хочу заменить значение e на "пример" в приведенной выше структуре. Может ли кто-нибудь помочь мне.

Я пытался провести l oop через структуру json и смог прочитать значение "e", но не смог его заменить. Я попробовал: `

std::vector<std::string> arr_value;
std::ifstream in("test.json");
json file = json::parse(in);

for (auto& td : file["b"])
    for (auto& prop : td["d"])
        arr_value.push_back(prop["e"]);
        //std::cout<<"prop" <<prop["e"]<< std::endl;

for (const auto& x : arr_value)
    std::cout <<"value in vector string= " <<x<< "\n";

for (decltype(arr_value.size()) i = 0; i <= arr_value.size() - 1; i++)
{
    std::string s = arr_value[i]+ "emp";
    std::cout <<"changed value= " <<s << std::endl;
    json js ;
    js = file;
    std::ofstream out("test.json");
    js["e"]= s;
    out << std::setw(4) << js << std::endl;

}

1 Ответ

1 голос
/ 29 января 2020

Следующее добавляет MODIFIED к каждому значению "e" и записывает результат в test_out.json:

#include <vector>
#include <iostream>
#include <fstream>
#include <nlohmann/json.hpp>

using json = nlohmann::json;

int main() {
        std::ifstream in("test.json");
        json file = json::parse(in);

        for (auto& td : file["b"])
                for (auto& prop : td["d"]) {
                        prop["e"] = prop["e"].get<std::string>() + std::string(" MODIFIED");
                }

        std::ofstream out("test_out.json");
        out << std::setw(4) << file << std::endl;
}

Строка prop["e"] = ... выполняет три действия:

  • Он получает свойство с ключом "e",
  • Приводит его в строку, используя .get<std::string>() и добавляет "modified", а
  • записывает результат в prop["e"], что ссылка на объект, вложенный в структуру JSON.
...