Подача вложенного JSON в быстрый JSON документ, в результате чего kParseErrorDocumentRootNotSingular - PullRequest
0 голосов
/ 17 марта 2020

Я готовлю функцию, которая будет возвращать значение ключа во вложенном JSON. Проблема в том, что я получаю вложенное содержимое JSON в виде строки, и это не то, что я могу изменить.

Например: {"remote": {"ip": "127.0. 0.1 "," port ": 58811}}

Содержимое" remote "является вложенным JSON, и мой код должен возвращать значение" ip ". Вверх по течению этот вложенный JSON превращается в строку и передается моей функции.

Мой код:

string sampleInputVal = "\"remote\": {\"ip\": \"127.0.0.1\", \"port\": 58811}";
map<string, string> inputMap;

inputMap.emplace("key","remote");
inputMap.emplace("nestedKey","IP");

string getValNestedJSON(string inputVal, map<string, string> inputParameters)
{
    Document inputJSON;
    inputJSON.Parse(inputVal.c_str());

    return inputJSON[inputParameters["nestedKey"].c_str()].GetString();
}

А вы можете догадаться, sampleInputVal - это просто то, что я использую для проверки функции, но я думаю, что escape-символы быстро портятся json потому что я получаю kParseErrorDocumentRootNotSingular.

Что мне делать?

1 Ответ

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

Я понял это. SampleInputVal был неправильным, он должен быть "{\"IP\":\"127.0.0.1\", \"port\":2.34}"

Вот код, который работает и подготовлен для значений, которые не являются просто строками:

string getValNestedJSON(string inputVal, map<string, string> inputParameters)
{
    string output;
    Document inputJSON;
    inputJSON.Parse(inputVal.c_str());
    const auto nestedKeyVal = inputParameters["nestedKey"].c_str();
    if (inputJSON[nestedKeyVal].IsString())
        output = inputJSON[nestedKeyVal].GetString();
    else if (inputJSON[nestedKeyVal].IsInt())
        output = to_string(inputJSON[nestedKeyVal].GetInt());
    else if (inputJSON[nestedKeyVal].IsDouble())
        output = to_string(inputJSON[nestedKeyVal].GetDouble());
    else if (inputJSON[nestedKeyVal].IsBool())
        output = to_string(inputJSON[nestedKeyVal].GetBool());
    else if (inputJSON[nestedKeyVal].IsUint())
        output = to_string(inputJSON[nestedKeyVal].GetUint());
    else if (inputJSON[nestedKeyVal].IsInt64())
        output = to_string(inputJSON[nestedKeyVal].GetInt64());
    else if (inputJSON[nestedKeyVal].IsUint64())
        output = to_string(inputJSON[nestedKeyVal].GetUint64());
    else if (inputJSON[nestedKeyVal].IsUint64())
        output = to_string(inputJSON[nestedKeyVal].GetUint64());
    else
        output = "Value in nested key cannot be obtained";

    return output;
}
...