Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.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
C++ 如何使用Rapidjson打印或转换具有未知结构的嵌套JSON_C++_Json_String_Cout_Rapidjson - Fatal编程技术网

C++ 如何使用Rapidjson打印或转换具有未知结构的嵌套JSON

C++ 如何使用Rapidjson打印或转换具有未知结构的嵌套JSON,c++,json,string,cout,rapidjson,C++,Json,String,Cout,Rapidjson,编程语言:C++ 环境:Linux Ubuntu 编译器:gcc(Ubuntu 7.4.0-1ubuntu1~18.04.1)7.4.0 我正在解析一个结构未知的嵌套JSON(每个键都可以是JSON文档),我们不知道键的名称和值。RapidJson可以解析它,但我找不到打印它或将它作为字符串对象复制到字符串的方法 我试着用谷歌搜索,但找不到任何答案。下面的链接与此类似: 但在这种情况下,他们使用的是键名(不是我的情况)(我的主要假设是我不知道包含键名的json结构) 现在我有了这种类型的JSO

编程语言:C++

环境:Linux Ubuntu

编译器:gcc(Ubuntu 7.4.0-1ubuntu1~18.04.1)7.4.0

我正在解析一个结构未知的嵌套JSON(每个键都可以是JSON文档),我们不知道键的名称和值。RapidJson可以解析它,但我找不到打印它或将它作为字符串对象复制到字符串的方法

我试着用谷歌搜索,但找不到任何答案。下面的链接与此类似:

但在这种情况下,他们使用的是键名(不是我的情况)(我的主要假设是我不知道包含键名的json结构)

现在我有了这种类型的JSON,并希望将其打印出来,或者将其转换为字符串()

我该怎么做?RapidJson有可能吗

这是我的示例代码:main.cpp

#include "rapidjson/document.h"
#include "rapidjson/writer.h"
#include "rapidjson/stringbuffer.h"
#include <iostream>

using namespace rapidjson;

void toJson1(Document &oJson)
{
  oJson.SetObject();
  oJson.AddMember("id", rapidjson::Value(1), oJson.GetAllocator());
  const char* json1 = "{\"a\":1,\"b\":\"c\"}";
  Document d1;
  d1.Parse(json1);
  oJson.AddMember("test", d1, oJson.GetAllocator());
  return;
}

void toJson(Document &oJson)
{
  oJson.SetObject();
  oJson.AddMember("id", rapidjson::Value(1), oJson.GetAllocator());
  Document d1;
  toJson1(d1);
  oJson.AddMember("test", d1, oJson.GetAllocator());
  return;
}

int main() {

   Document d;

   toJson(d);

   StringBuffer buffer;
   Writer<StringBuffer> writer(buffer);
   d.Accept(writer);

   std::cout << buffer.GetString() << std::endl;
   return 0;
}
#包括“rapidjson/document.h”
#包括“rapidjson/writer.h”
#包括“rapidjson/stringbuffer.h”
#包括
使用名称空间rapidjson;
作废至JSON1(文件和oJson)
{
oJson.SetObject();
AddMember(“id”,rapidjson::Value(1),oJson.GetAllocator());
const char*json1=“{\'a\':1,\'b\':\'c\'”;
文件d1;
d1.Parse(json1);
AddMember(“test”,d1,oJson.GetAllocator());
返回;
}
void-toJson(文档和oJson)
{
oJson.SetObject();
AddMember(“id”,rapidjson::Value(1),oJson.GetAllocator());
文件d1;
toJson1(d1);
AddMember(“test”,d1,oJson.GetAllocator());
返回;
}
int main(){
文件d;
toJson(d);
字符串缓冲区;
写入器(缓冲区);
d、 接受(作者);

经过多次尝试,我终于找到了解决办法

在每个函数中,我们都应该重用外部文档的分配器

上述代码的更正版本为:

main.cpp


#include "rapidjson/document.h"
#include "rapidjson/writer.h"
#include "rapidjson/stringbuffer.h"
#include <iostream>

using namespace rapidjson;

void toJson1(Document &oJson)
{
   oJson.SetObject();
   oJson.AddMember("id", rapidjson::Value(1), oJson.GetAllocator()); 
   const char* json1 = "{\"a\":1,\"b\":\"c\"}";
   Document d1(&oJson.GetAllocator());
    d1.Parse(json1);
   oJson.AddMember("test", d1, oJson.GetAllocator());
   return;
}

void toJson(Document &oJson)
{
   oJson.SetObject();
   oJson.AddMember("id", rapidjson::Value(1), oJson.GetAllocator()); 
   Document d1(&oJson.GetAllocator());
    toJson1(d1);

   oJson.AddMember("test", d1, oJson.GetAllocator());
   return;
}

int main() {

    Document d;

    toJson(d);

    StringBuffer buffer;
    Writer<StringBuffer> writer(buffer);
    d.Accept(writer);

    std::cout << buffer.GetString() << std::endl;
    return 0;
}


#包括“rapidjson/document.h”
#包括“rapidjson/writer.h”
#包括“rapidjson/stringbuffer.h”
#包括
使用名称空间rapidjson;
作废至JSON1(文件和oJson)
{
oJson.SetObject();
AddMember(“id”,rapidjson::Value(1),oJson.GetAllocator());
const char*json1=“{\'a\':1,\'b\':\'c\'”;
文档d1(&oJson.GetAllocator());
d1.Parse(json1);
AddMember(“test”,d1,oJson.GetAllocator());
返回;
}
void-toJson(文档和oJson)
{
oJson.SetObject();
AddMember(“id”,rapidjson::Value(1),oJson.GetAllocator());
文档d1(&oJson.GetAllocator());
toJson1(d1);
AddMember(“test”,d1,oJson.GetAllocator());
返回;
}
int main(){
文件d;
toJson(d);
字符串缓冲区;
写入器(缓冲区);
d、 接受(作者);

经过多次尝试,我终于找到了解决办法

在每个函数中,我们都应该重用外部文档的分配器

上述代码的更正版本为:

main.cpp


#include "rapidjson/document.h"
#include "rapidjson/writer.h"
#include "rapidjson/stringbuffer.h"
#include <iostream>

using namespace rapidjson;

void toJson1(Document &oJson)
{
   oJson.SetObject();
   oJson.AddMember("id", rapidjson::Value(1), oJson.GetAllocator()); 
   const char* json1 = "{\"a\":1,\"b\":\"c\"}";
   Document d1(&oJson.GetAllocator());
    d1.Parse(json1);
   oJson.AddMember("test", d1, oJson.GetAllocator());
   return;
}

void toJson(Document &oJson)
{
   oJson.SetObject();
   oJson.AddMember("id", rapidjson::Value(1), oJson.GetAllocator()); 
   Document d1(&oJson.GetAllocator());
    toJson1(d1);

   oJson.AddMember("test", d1, oJson.GetAllocator());
   return;
}

int main() {

    Document d;

    toJson(d);

    StringBuffer buffer;
    Writer<StringBuffer> writer(buffer);
    d.Accept(writer);

    std::cout << buffer.GetString() << std::endl;
    return 0;
}


#包括“rapidjson/document.h”
#包括“rapidjson/writer.h”
#包括“rapidjson/stringbuffer.h”
#包括
使用名称空间rapidjson;
作废至JSON1(文件和oJson)
{
oJson.SetObject();
AddMember(“id”,rapidjson::Value(1),oJson.GetAllocator());
const char*json1=“{\'a\':1,\'b\':\'c\'”;
文档d1(&oJson.GetAllocator());
d1.Parse(json1);
AddMember(“test”,d1,oJson.GetAllocator());
返回;
}
void-toJson(文档和oJson)
{
oJson.SetObject();
AddMember(“id”,rapidjson::Value(1),oJson.GetAllocator());
文档d1(&oJson.GetAllocator());
toJson1(d1);
AddMember(“test”,d1,oJson.GetAllocator());
返回;
}
int main(){
文件d;
toJson(d);
字符串缓冲区;
写入器(缓冲区);
d、 接受(作者);

std::cout RapidJSON文档类型非常灵活。它有
IsArray
IsObject
等方法来确定对象的类型。并且它有方法在您知道对象的类型后迭代数组和对象成员:。您想做的只是将其重新序列化为JSON吗?还是想在某些st中打印它我阅读了教程,但是我遇到了一个嵌套的JSON对象,它有未知成员,我将创建示例C++代码,并在这里分享我的确切错误,它需要大约30分钟,主代码非常大,我需要创建一个样本来确定确切的问题。nd或MemberBegin/MemberEnd以获取对象节点的所有键/值对。我添加了RapidJson在使用此代码结构时将损坏的示例代码。如何修复此问题?RapidJson文档类型非常灵活。它有
IsArray
IsObject
等方法来确定对象的类型。并且方法:一旦知道对象的类型,就可以迭代数组和对象成员。您想把它作为JSON保留吗?或者您想以某种结构化的方式打印它吗?我阅读了教程,但是我遇到了一个嵌套的JSON对象,它有未知成员,我将创建示例C++代码,并在此分享我的确切e。错误,大约需要30分钟,主代码非常大,我需要创建一个示例来确定确切的问题。您可以使用begin/end或MemberBegin/MemberEnd对GenericObject进行迭代,以获取对象节点的所有键/值对。我添加了RapidJson在使用此代码结构时将损坏的示例代码。如何修复t他的?