Как сделать boost ptree parse xml и json одинаково? - PullRequest
0 голосов
/ 11 июля 2011

Итак, давайте взглянем на немного измененный пример код:

#include <stdio.h>
#include <iostream>
#include <fstream>
#include <boost/foreach.hpp>
#include <boost/property_tree/ptree.hpp>
#include <boost/property_tree/xml_parser.hpp>

void load(const std::string &file_path)
{
    using boost::property_tree::ptree;
    ptree pt;
    std::ifstream script;
    script.open(file_path.c_str());
    read_xml(script, pt);
    BOOST_FOREACH(boost::property_tree::ptree::value_type &v,
                  config.get_child("config.servecies"))
    {
        std::cout
            << "First data: " << v.first.data() << std::endl
            << "Second data: " << v.second.data() << std::endl;
    }

}

Я примеряю его с таким xml:

<config>
    <servecies>
        <module>file</module>
        <module>Admin</module>
        <module>HR</module>
        <notModule>MyNotModule</notModule>
    </servecies>
</config>

печатает:

Первые данные: модуль
Вторые данные: файл
Первые данные: модуль
Вторые данные: Admin
Первые данные: модуль
Вторые данные: HR
Первые данные: notModule
Вторые данные: MyNotModule

Но когда я пробую такой файл json (созданный из этого xml с помощью этого веб-инструмента ):

{
  "config": {
    "name": "myconfig",
    "servecies": {
      "module": [
        "file",
        "Admin",
        "HR"
      ],
      "notModule": "MyNotModule"
    }
  }
}

печатает:

Первые данные: модуль
Вторые данные:
Первые данные: notModule
Вторые данные: MyNotModule

Как заставить boost property_tree генерировать те же результаты в JSON, что и при синтаксическом анализе XML? Как выяснить, является ли value_type каким-либо видом одномерного массива, и повторить его?

1 Ответ

4 голосов
/ 11 июля 2011

Как заставить boost property_tree генерировать те же результаты в JSON, что и при синтаксическом анализе XML?

Иметь выход Boost.PropertyTree в формате JSON. Затем он сможет ввести этот файл JSON.

Boost.PropertyTree используется для хранения свойств. Это способ сохранить свойства в удобочитаемых форматах и ​​восстановить их позже.

Это , а не способ сделать быстрое и грязное считывание JSON / XML. Он записывает данные в определенном формате, и когда ему дают данные для чтения, он ожидает, что данные, которые ему даны, - это то, что он написал . Если вы попытаетесь запихнуть какой-нибудь старый JSON, он не обязательно вернет разумную информацию. Он записывает действительный JSON, но структура этого JSON специфична для PropertyTree, и код чтения будет ожидать, что эта структура будет существовать.

Примечание: я не думаю, что веб-инструмент очень хорош, поскольку он добавил информацию в файл JSON, которого нет в исходном XML.

...