0

それでは、少し変更されたサンプルコードを見てみましょう。

#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>

印刷します:

最初のデータ:モジュール
2番目のデータ:ファイル
最初のデータ:モジュール
2番目のデータ:管理者
最初のデータ:モジュール
2番目のデータ:HR
最初のデータ:notModule
2番目のデータ:MyNotModule

しかし、私がそのようなjsonファイル(このWebツールを介してこのxmlから作成された)を試してみると:

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

印刷します:

最初のデータ:モジュール
2番目のデータ:
最初のデータ:notModule
2番目のデータ:MyNotModule

Boost property_treeがXMLを解析するのと同じ結果をJSONで生成するようにするにはどうすればよいですか?value_typeがある種の1次元配列であるかどうかを確認し、それを反復処理するにはどうすればよいですか?

4

1 に答える 1

4

Boost property_treeがXMLを解析するのと同じ結果をJSONで生成するようにするにはどうすればよいですか?

Boost.PropertyTreeにJSONを出力させます。その後、そのJSONファイルを入力できるようになります。

Boost.PropertyTreeは、プロパティを格納するために使用されます。これは、プロパティを人間が読める形式で保存し、後でそれらのプロパティを復元する方法です。

これは、高速でダーティなJSON/XMLリーダーを作成する方法ではありません。特定の形式でデータを書き込み、読み取るデータが与えられると、与えられたデータが書き込んだものであると想定します。古いJSONを押し込もうとしても、必ずしも妥当な情報が返されるとは限りません。有効なJSONを書き込みますが、そのJSONの構造はPropertyTreeに固有であり、読み取りコードはその構造が存在することを想定しています。

補足:元のXMLには存在しなかった情報をJSONファイルに追加したため、Webツールはあまり良いとは思いません。

于 2011-07-11T00:16:29.597 に答える