Home | History | Annotate | Download | only in json
      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 #include "base/json/json_string_value_serializer.h"
      6 
      7 #include "base/json/json_reader.h"
      8 #include "base/json/json_writer.h"
      9 #include "base/logging.h"
     10 
     11 using base::Value;
     12 
     13 JSONStringValueSerializer::~JSONStringValueSerializer() {}
     14 
     15 bool JSONStringValueSerializer::Serialize(const Value& root) {
     16   return SerializeInternal(root, false);
     17 }
     18 
     19 bool JSONStringValueSerializer::SerializeAndOmitBinaryValues(
     20     const Value& root) {
     21   return SerializeInternal(root, true);
     22 }
     23 
     24 bool JSONStringValueSerializer::SerializeInternal(const Value& root,
     25                                                   bool omit_binary_values) {
     26   if (!json_string_ || initialized_with_const_string_)
     27     return false;
     28 
     29   int options = 0;
     30   if (omit_binary_values)
     31     options |= base::JSONWriter::OPTIONS_OMIT_BINARY_VALUES;
     32   if (pretty_print_)
     33     options |= base::JSONWriter::OPTIONS_PRETTY_PRINT;
     34 
     35   return base::JSONWriter::WriteWithOptions(&root, options, json_string_);
     36 }
     37 
     38 Value* JSONStringValueSerializer::Deserialize(int* error_code,
     39                                               std::string* error_str) {
     40   if (!json_string_)
     41     return NULL;
     42 
     43   return base::JSONReader::ReadAndReturnError(*json_string_,
     44       allow_trailing_comma_ ? base::JSON_ALLOW_TRAILING_COMMAS :
     45           base::JSON_PARSE_RFC,
     46       error_code, error_str);
     47 }
     48