2012-07-03 5 views
0

Я использую jsoncpp для чтения и записи json-файлов.Запись большого массива в одной строке с использованием javacpp's StyledWriter

Для записи я использую StyledWriter, который записывает json в удобочитаемом виде.

В настоящее время я пытаюсь написать массив ints в json-файл. Документация описывает следующие правила для записи значения массива:

  • если пусто, то печать [] без отступа и линии разрыва
  • если массив не содержит значение объекта, пустой массив или некоторые другие типы значений, и все значения вписываются в одну строку, а затем печатают массив в одной строке.
  • в противном случае, если значения не помещаются в одну строку или массив содержит объект или не пустой массив, затем напечатайте одно значение на строку.

Поскольку массив, который я пытаюсь написать слишком большой для одной линии, в соответствии с вышеприведенными правилами, писатель печатает это одно значение в каждой строке, что делает мой JSON некрасиво и менее читаемым. Я бы предпочел, чтобы он писал весь массив в одной строке или в нескольких строках с несколькими значениями в строке.

Я знаю, что jasoncpp является open source, и поэтому я могу изменить автора, чтобы делать то, что хочу, , но мне интересно, есть ли другой способ сделать это. Возможно, используя FastWriter (который создает однострочный json) и StyledWriter?

+0

[Открыть выпуск] (https://github.com/open-source-parsers/jsoncpp/issues/new). Это может быть добавлено как новая функция. – cdunn2001

ответ

-1

Посмотрите на json_writer.cpp - два метода writeIndent().

void 
StyledStreamWriter::writeIndent() 
{ 
    /* 
    Some comments in this method would have been nice. ;-) 

    if (!document_.empty()) 
    { 
     char last = document_[document_.length()-1]; 
     if (last == ' ')  // already indented 
     return; 
     if (last != '\n') // Comments may add new-line 
     *document_ << '\n'; 
    } 
    */ 
//Removing indent and line feed!!! *document_ << '\n' << indentString_; 
} 

void 
StyledWriter::writeIndent() 
{ 
    if (!document_.empty()) 
    { 
     char last = document_[document_.length()-1]; 
     if (last == ' ')  // already indented 
     return; 
//Removing indent and line feed!!!  if (last != '\n') // Comments may add new-line 
//Removing indent and line feed!!!   document_ += '\n'; 
    } 
    document_ += indentString_; 
} 
1

Вы должны использовать FastWriter следующим образом:

Json::Value your_json(Json::objectValue); 
//init your json... 
Json::FastWriter fastWriter; 
fastWriter.write(your_json) 

 Смежные вопросы

  • Нет связанных вопросов^_^