Проблема использования json_spirit

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

#include <cstdio>
#include <cstring>
#include <json_spirit.h>

using namespace std;
using namespace json_spirit;

//A sample get file request 
char *jsonInput = 
"{\"request\" : { \
                \"service\" : \"fmgr\" \
                \"cookie\"  : \"Abxruyyeziyrolsu\" \
                \"req\"     : \"read\" \
                \"fname\"   : \"Junk.txt\" \
                \"size\"    :  1024 \
                \"data\"    :  \"data\" \
}}";


int main(int argc, char **argv)
{
    Value val;
    const string s = jsonInput;
    read(s, val); //read the jsonInput to the value
    Object obj = val.get_obj();
    std::string service, cookie, req, fname, data;
    uint32_t size;

    for(Object::size_type i = 0; i != obj.size(); ++i) {   
        const Pair& pair = obj[i];
        const string& name  = pair.name_;
        const Value&  value = pair.value_;

        if( name == "service" ) service  = value.get_str();
        else if( name == "cookie") cookie  = value.get_str();
        else if( name == "req" ) req = value.get_str();
        else if( name == "fname" ) fname = value.get_str();
        else if( name == "size" ) size = value.get_int();
        else if( name == "data" ) data = value.get_str();
    }
    std::cout<<service << " " << cookie << " " << req << " " << fname << " " << size << " " << data ;
    return 0;
}

2 ответа

Для простоты, как и в случае с json_spirit, попробуйте следующее после исправления пропущенных разделителей ',' в строке JSON.

std::string json_input = <your valid JSON string>
json_spirit::Value value;
auto success = json_spirit::read_string(json_input, value);
if (success == true) {
    auto object = value.get_obj();
    for (auto entry : object) {
        if (entry.name_ == "service") service = entry.value_.get_str();
        else if...
        .
        .
    }
}

Есть две проблемы:

  1. Строка jsonInput не является допустимой JSON, запятые для разделения пар объектов отсутствуют.
  2. Следующий вопрос более сложен для объяснения. Значение верхнего уровня само по себе является объектом, поэтому вызов val.get_obj() возвращает объект, содержащий все данные. В этом объекте есть только одна пара с именем "request". Вызов val.get_obj()[0] вернет эту пару. Затем вам нужно получить объект из значения этой пары.

    Значение val; читать (s, val); // читаем jsonInput к значению

    const Pair& pair = val.get_obj()[0]; // получает пару имя: значение с именем "запрос"

    const Object & obj = pair.value_.get_obj (); // получает сервис, cookie... объект

Другие вопросы по тегам