2011-09-26 43 views
9

Tôi đang sử dụng jsoncpp và tôi đang gặp sự cố với cách các thông điệp json được định dạng khi chúng được viết bằng một trong các Nhà văn.Các vấn đề về định dạng jsoncpp

Ví dụ:

root["name"] = "monkey"; 
std::cout << writer.write(root) << "\n"; 

Cung cấp cho tôi một cái gì đó được định dạng như thế này

{ 
    "name" : "monkey" 
} 

Trong khi tôi thực sự muốn:

{"name":"monkey"} 

Tôi đã xem xét các tài liệu và có đề cập đến của setIndentLength() nhưng chúng không xuất hiện trong tệp nguồn, vì vậy có thể chúng không được chấp nhận hoặc một cái gì đó.

Dù sao thì ai cũng biết cách thực hiện việc này?

+0

Bạn nên cho chúng tôi biết 'writer' là gì. Các đầu mối trong loại của nó. –

Trả lời

5

Nếu bạn sử dụng Jsoncpp phiên bản 1.1, bạn có thể sử dụng Json::FastWriter thay vì Json::StyledWriter hoặc Json::Writer:

Tài liệu JSON được viết bằng một đường duy nhất. Nó không nhằm mục đích cho việc tiêu thụ ' ' con người ', nhưng có thể hữu ích để hỗ trợ tính năng như RPC nơi băng thông bị hạn chế.

+0

Tôi có jsoncpp 1.8.3 làm thế nào tôi có thể trở lại verson 1.1? @deepmax – Alper

2

FastWriter, StyledWriter, StyledStreamWriter, và Writerdeprecated. Sử dụng StreamWriterBuilder, tạo một StreamWriter với API hơi khác một chút. Sử dụng theo cách này:

Json::StreamWriterBuilder builder; 
builder.settings_["indentation"] = ""; 
std::unique_ptr<Json::StreamWriter> writer(builder.newStreamWriter()); 
writer->write(root, &std::cout); 
+0

Tại sao 'cài đặt' có dấu gạch dưới sau? :( –

+0

@LightnessRacesinOrbit nó là tên thành viên của lớp (xem http://open-source-parsers.github.io/jsoncpp-docs/doxygen/class_json_1_1_stream_writer_builder.html) – mpromonet

+0

@mpromonet: Vâng, tôi hiểu điều đó. Đó là khá kỳ lạ đối với một giao diện công cộng, IMO –

1

Là phần mở rộng của câu trả lời của cdunn2001, không cần viết lại cài đặt mặc định (.settings_). Bạn chỉ có thể ghi đè giá trị 'thụt đầu dòng' của trình tạo StreamWriterBuilder:

Json::Value json = ... 
Json::StreamWriterBuilder builder; 
builder["commentStyle"] = "None"; 
builder["indentation"] = ""; //The JSON document is written in a single line 
std::unique_ptr<Json::StreamWriter> writer(builder.newStreamWriter()); 
writer->write(json, &std::cout); 
+0

hãy giải thích câu trả lời này một chút. các câu trả lời chỉ có mã phần lớn không có nhiều giá trị. cảm ơn! Hãy tiếp tục phát huy! –

+0

@progressive_overload cảm ơn bạn trước. Đã thêm một số giải thích. – Ramiro

Các vấn đề liên quan