Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/152.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsoncpp问题 我使用JSONCPP解析C++的JSON格式。 我不明白它是如何工作的;缺少文档和示例来帮助我入门,我想知道是否有人能给我一些快速的指导。我发现的唯一的例子是关于文件的_C++_Json_Jsoncpp - Fatal编程技术网

Jsoncpp问题 我使用JSONCPP解析C++的JSON格式。 我不明白它是如何工作的;缺少文档和示例来帮助我入门,我想知道是否有人能给我一些快速的指导。我发现的唯一的例子是关于文件的

Jsoncpp问题 我使用JSONCPP解析C++的JSON格式。 我不明白它是如何工作的;缺少文档和示例来帮助我入门,我想知道是否有人能给我一些快速的指导。我发现的唯一的例子是关于文件的,c++,json,jsoncpp,C++,Json,Jsoncpp,我使用HTTP堆栈在缓冲区中获取json消息。例如,缓冲区包含消息{“state”:“Running”}。我如何使用Json::reader来解析它?我发现的唯一一个例子是从文件中读取数据 如何将值写入Json消息?例如,我想将“monkey:no”和“running:yes”写入Json消息,然后在GET请求中使用该消息 谢谢 更新: 例如,在1)中,如何解析包含json消息的缓冲区,如下所示: char* buff; uint32_t buff_size; 除了缺少文档之外,什么都没有。是

我使用HTTP堆栈在缓冲区中获取json消息。例如,缓冲区包含消息
{“state”:“Running”}
。我如何使用Json::reader来解析它?我发现的唯一一个例子是从文件中读取数据

  • 如何将值写入Json消息?例如,我想将
    “monkey:no”
    “running:yes”
    写入Json消息,然后在GET请求中使用该消息

  • 谢谢

    更新:

    例如,在1)中,如何解析包含json消息的缓冲区,如下所示:

    char* buff;
    uint32_t buff_size;
    

    除了缺少文档之外,什么都没有。是的,它主要是参考文档,但它非常好,并且具有良好的交叉链接

  • 只是
  • 只是或者可能

  • 也许这是你问题第一部分的好例子:

    Json::Value values;
    Json::Reader reader;
    reader.parse(input, values);
    
    Json::Value s = values.get("state","default value");
    

    示例代码供您参考,如下所示:

    file.json

    对于上面的示例json文件,使用场景如下

    #include <iostream>
    #include "json/json.h"
    #include <fstream>
    
    using namespace std;
    
    int main(){
    
    Json::Value root;
    Json::Reader reader;
    const Json::Value defValue;         //used for default reference
    std::ifstream ifile("file.json");
    
    bool isJsonOK = ( ifile != NULL && reader.parse(ifile, root) );
    if(isJsonOK){
    
        const Json::Value s = root.get("A",defValue);
        if(s.isObject()){
    
            Json::Value s2 = s.get("AAA","");
            cout << "s2 : " << s2.asString() << endl;
        }else{
            cout << "value for key \"A\" is not object type !" << endl;
        }
    }
    else
        cout << "json not OK !!" << endl;
    
    return 1;
    
    #包括
    #包括“json/json.h”
    #包括
    使用名称空间std;
    int main(){
    Json::值根;
    Json::阅读器;
    const Json::Value defValue;//用于默认引用
    std::ifstream ifile(“file.json”);
    bool-isJsonOK=(ifile!=NULL&&reader.parse(ifile,root));
    if(isJsonOK){
    const Json::Value s=root.get(“A”,defValue);
    如果(s.isObject()){
    Json::Value s2=s.get(“AAA”,即“);
    
    我不能,我不完全理解,这就是为什么我要做这个topic@KaiserJohaan:然后您必须解释您不理解的内容。
    Json::Reader::parse
    方法有3个重载。一个重载用于输入流(可能是stringstream),一个用于表示为指向开始和终止NUL的指针的字符串,另一个用于std::string。writer类具有简单的
    write
    方法,该方法返回
    std::string
    ,或者您可以只将值写入ostream(包括stringstream)使用标准运算符
    我必须同意KaiserJohaan的观点,这个json库的文档非常缺乏。一旦你弄明白了,它似乎可以很好地工作,但很难学会如何使用它。它们现在是最新的。它们也会很有帮助。较老的
    读者
    令人困惑,不推荐使用。是的,这就是我所看到的ng for;我不知道如何在缓冲区上使用reader.parse();更新后的OPI认为使用缓冲区而不是字符串是没有问题的,但是如果你有类似于
    char buffer[max]
    的东西,你可以使用
    parse(buffer,buffer+max-1,values)
    #include <iostream>
    #include "json/json.h"
    #include <fstream>
    
    using namespace std;
    
    int main(){
    
    Json::Value root;
    Json::Reader reader;
    const Json::Value defValue;         //used for default reference
    std::ifstream ifile("file.json");
    
    bool isJsonOK = ( ifile != NULL && reader.parse(ifile, root) );
    if(isJsonOK){
    
        const Json::Value s = root.get("A",defValue);
        if(s.isObject()){
    
            Json::Value s2 = s.get("AAA","");
            cout << "s2 : " << s2.asString() << endl;
        }else{
            cout << "value for key \"A\" is not object type !" << endl;
        }
    }
    else
        cout << "json not OK !!" << endl;
    
    return 1;