Я разбор JSON
структуру, которая аналогична следующегоитерации и извлекать вложенный объект в JSON с помощью rapidjson
{
"item1" : "value1"
"item2" : "value2"
// ...
"itemn" : {
"outernestedItem1" : {
"innerNestedItem1" : "valuen1"
"innerNestedItem2" : "valuen2"
}
// ....
"outernestedItemn" : {
"innerNestedItem1" : "valuen1"
"innerNestedItem2" : "valuen2"
}
}
}
Числа внешних вложенных элементов не является фиксированным, так что я итерацией с использованием итератора из rapidjson, внутреннего переменные -nested objects фиксированы, поэтому я могу получить доступ к ним с помощью [].
const rapidjson::Value& itemn = document["itemn"];
for (rapidjson::Value::ConstMemberIterator itr = itemn.MemberBegin();
itr != itemn.MemberEnd(); ++itr)
{
rapidjson::StringBuffer sb;
rapidjson::Writer<rapidjson::StringBuffer> writer(sb);
itr->value.Accept(writer);
std::cout << sb["innerNestedItem1"].GetString();
std::cout << sb["innerNestedItem2"].GetString();
}
но [] не разрешено использовать sb (строковый буфер), любая идея, как я могу это сделать?
Редактировать 1: Я сделал это очень неэффективно, но просто поделился решением, поэтому он может помочь кому-то придумать эффективное решение.
const rapidjson::Value& itemn = document["itemn"];
for (rapidjson::Value::ConstMemberIterator itr = itemn.MemberBegin();
itr != itemn.MemberEnd(); ++itr)
{
rapidjson::StringBuffer sb;
rapidjson::Writer<rapidjson::StringBuffer> writer(sb);
itr->value.Accept(writer);
//changed from here onwards
rapidjson::Document for_outer_nested_item;
std::string temp = sb.GetString();
char buffer2[100000];
strcpy_s(buffer2, temp.c_str());
for_outer_nested_item.ParseInsitu(buffer2);
std::cout << executive_command["innerNestedItem1"].GetString() << std::endl;
std::cout << executive_command["innerNestedItem2"].GetString() << std::endl;
}
Если 'документ [ "itemn"]' возвращает элемент всей конструкции, а затем 'документ [ "itemn"] [ "innerNestedItem1"]' должно дать вам содержание вложенного элемента внутри. Ваш подход к первому форматированию содержимого '* itr' для строки и затем попытка извлечь элементы из этих неструктурированных данных неверна, было бы легче сохранить структурированные данные. –
Документ @UlrichEckhardt ["itemn"] содержит все неопределенное количество outernesteditems, а outernesteditem - фиксированный тип объекта. – Ruturaj
@Ruturaj, Вы когда-нибудь выяснили более элегантное решение? – Stradigos