Создание массивов JSON в Boost с использованием деревьев свойств

Еще один простой способ - использовать File.AppendText, он добавляет кодированный текст UTF-8 к существующему файлу или к новому файлу, если указанный файл не существует и возвращает System.IO.StreamWriter

using (System.IO.StreamWriter sw = System.IO.File.AppendText(logFilePath + "log.txt"))
{                                                
    sw.WriteLine("this is a log");
}
66
задан 2NinerRomeo 11 April 2012 в 06:00
поделиться

3 ответа

Если Вы хотите JSON в C++, нет никакой потребности в Повышении. С этим библиотека можно получить JSON как тип данных первого класса, который ведет себя как контейнер STL.

// Create JSON on the fly.
json j2 = {
  {"pi", 3.141},
  {"happy", true},
  {"name", "Niels"},
  {"nothing", nullptr},
  {"answer", {
    {"everything", 42}
  }},
  {"list", {1, 0, 2}},
  {"object", {
    {"currency", "USD"},
    {"value", 42.99}
  }}
};

// Or treat is as an STL container; create an array using push_back
json j;
j.push_back("foo");
j.push_back(1);
j.push_back(true);

// also use emplace_back
j.emplace_back(1.78);

// iterate the array
for (json::iterator it = j.begin(); it != j.end(); ++it) {
  std::cout << *it << '\n';
}
0
ответ дан 24 November 2019 в 14:57
поделиться

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

Значения JSON сопоставляются на узлы, содержащие значение. Однако вся информация типа теряется; Числа, а также литералы «NULL», «TRUE» и «FALSE» просто отображаются с их струнной формой.

После изучения этого я перешел на более полную реализацию JSON JSON Spirit . Эта библиотека использует Boost Spirit для реализации Грамматики JSON и полностью поддерживает JSON, включая массивы.

Я предлагаю вам использовать альтернативную реализацию C ++ JSON.

11
ответ дан 24 November 2019 в 14:57
поделиться

Что вам нужно сделать, это веселье. Это из памяти, но что-то вроде этого работает для меня.

boost::property_tree::ptree root;
boost::property_tree::ptree child1;
boost::property_tree::ptree child2;

// .. fill in children here with what you want
// ...

ptree.push_back( std::make_pair("", child1 ) );
ptree.push_back( std::make_pair("", child2 ) );

Но посмотрите несколько ошибок в разборе и письме JSON. Некоторые из которых я отправил отчеты об ошибках для - без ответа: (

Отредактируйте: чтобы решить беспокойство об этом, неверно, как {"": "", "": "}

Это только происходит, когда Массив - это корневой элемент. Сценарист POREE PTREE лечит все элементы корневых элементов как объекты - никогда не используются массивы или значения. Это вызвано следующей строкой в ​​Boost / Property_tree / Detail / json_parser_writer.hpp

else if (indent > 0 && pt.count(Str()) == pt.size())

Избавиться от "Отступ> 0 && "позволит ему правильно написать массивы.

Если вам не нравится, сколько пространства производится, вы можете использовать патч, который я предоставил здесь

20
ответ дан 24 November 2019 в 14:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: