【问题标题】:JSONcpp - trying to deserialize to variablesJSONcpp - 尝试反序列化为变量
【发布时间】:2026-02-08 08:10:02
【问题描述】:

如何反序列化data 值?

{"data": 
    [{
        "Id": 3, 
        "Name" : "Wind", 
        "Type" : 2, 
        "Order" : 1, 
        "user" : "Mike"
    }], 
    "free" : 0, 
    "line" : 10, 
    "count" : 1
}

这是我迄今为止尝试过的:

class Class {
public: 
    virtual ~Class(void);
    virtual void Serialize(Json::Value& root); 
    virtual void Deserialize(Json::Value& root); 

    int Id;
    std::string free;
    std::string line;
    std::string count;
    std::vector<std::string> ID;

};

void Class::Serialize(Json::Value& root) {
    // ...
}

void Class::Deserialize(Json::Value& root) {

     free = root.get("top", 0).asInt();
     line = root.get("skip", 0).asInt();
     count = root.get("count", 0).asInt();

    Json::Value Data= root["data"];
    Id = Data.get("Id", 0).asInt();
}

我无法反序列化Data元素Id等。可以提取元素freelinecount

我试图创建第二个类来分隔它们,但这也不起作用。

【问题讨论】:

  • 为什么不能反序列化?这将非常有趣。如果您能回答这个问题,也许您可​​以针对您的问题向我们提问?
  • 编辑 int Ids 中的错字 ids= Data.get("Id", 0).asInt();
  • 那些 int 定义在抱歉类中。

标签: c++ json deserialization jsoncpp


【解决方案1】:

JSON 元素 data 是一个数组。您错过了要访问的元素的索引。

目前,它只有一个元素,因此索引为 0,即Data[0]

例子:

Id = Data[0].get("Id", 0).asInt();
         ^^^

【讨论】:

  • 感谢帮助,之前尝试过数组索引,但没有成功。
  • @sam:不客气!如果它解决了您的问题,请接受此答案。谢谢!
最近更新 更多