1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef BASE_JSON_JSON_WRITER_H_ 6 #define BASE_JSON_JSON_WRITER_H_ 7 8 #include <string> 9 10 #include "base/base_export.h" 11 #include "base/basictypes.h" 12 13 namespace base { 14 15 class Value; 16 17 class BASE_EXPORT JSONWriter { 18 public: 19 enum Options { 20 // For values of binary type, the value (and key if within a dictionary) 21 // will be omitted from the output. 22 OPTIONS_OMIT_BINARY_VALUES = 1 << 0, 23 24 // This option instructs the writer to write doubles that have no fractional 25 // part as a normal integer (i.e., without using exponential notation 26 // or appending a '.0') as long as the value is within the range of a 27 // 64-bit int. 28 OPTIONS_OMIT_DOUBLE_TYPE_PRESERVATION = 1 << 1, 29 30 // Return a slightly nicer formatted json string (pads with whitespace to 31 // help with readability). 32 OPTIONS_PRETTY_PRINT = 1 << 2, 33 }; 34 35 // Given a root node, generates a JSON string and puts it into |json|. 36 // TODO(tc): Should we generate json if it would be invalid json (e.g., 37 // |node| is not a DictionaryValue/ListValue or if there are inf/-inf float 38 // values)? 39 static void Write(const Value* const node, std::string* json); 40 41 // Same as above but with |options| which is a bunch of JSONWriter::Options 42 // bitwise ORed together. 43 static void WriteWithOptions(const Value* const node, int options, 44 std::string* json); 45 46 private: 47 JSONWriter(bool omit_binary_values, 48 bool omit_double_type_preservation, bool pretty_print, 49 std::string* json); 50 51 // Called recursively to build the JSON string. Whe completed, value is 52 // json_string_ will contain the JSON. 53 void BuildJSONString(const Value* const node, int depth); 54 55 // Adds space to json_string_ for the indent level. 56 void IndentLine(int depth); 57 58 bool omit_binary_values_; 59 bool omit_double_type_preservation_; 60 bool pretty_print_; 61 62 // Where we write JSON data as we generate it. 63 std::string* json_string_; 64 65 DISALLOW_COPY_AND_ASSIGN(JSONWriter); 66 }; 67 68 } // namespace base 69 70 #endif // BASE_JSON_JSON_WRITER_H_ 71