| OLD | NEW |
| 1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "base/json_writer.h" | 5 #include "base/json_writer.h" |
| 6 | 6 |
| 7 #include "base/logging.h" | 7 #include "base/logging.h" |
| 8 #include "base/string_util.h" | 8 #include "base/string_util.h" |
| 9 #include "base/values.h" | 9 #include "base/values.h" |
| 10 #include "base/string_escape.h" | 10 #include "base/string_escape.h" |
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 85 } else if (real.length() > 1 && real[0] == '-' && real[1] == '.') { | 85 } else if (real.length() > 1 && real[0] == '-' && real[1] == '.') { |
| 86 // "-.1" bad "-0.1" good | 86 // "-.1" bad "-0.1" good |
| 87 real.insert(1, "0"); | 87 real.insert(1, "0"); |
| 88 } | 88 } |
| 89 json_string_->append(real); | 89 json_string_->append(real); |
| 90 break; | 90 break; |
| 91 } | 91 } |
| 92 | 92 |
| 93 case Value::TYPE_STRING: | 93 case Value::TYPE_STRING: |
| 94 { | 94 { |
| 95 std::string value; |
| 96 bool result = node->GetAsString(&value); |
| 97 DCHECK(result); |
| 95 if (escape) { | 98 if (escape) { |
| 96 std::wstring value; | 99 string_escape::JsonDoubleQuote(UTF8ToUTF16(value), |
| 97 bool result = node->GetAsString(&value); | 100 true, |
| 98 DCHECK(result); | 101 json_string_); |
| 99 AppendQuotedString(value); | |
| 100 } else { | 102 } else { |
| 101 std::string value; | 103 string_escape::JsonDoubleQuote(value, true, json_string_); |
| 102 bool result = node->GetAsString(&value); | |
| 103 DCHECK(result); | |
| 104 string_escape::JavascriptDoubleQuote(value, true, json_string_); | |
| 105 } | 104 } |
| 106 break; | 105 break; |
| 107 } | 106 } |
| 108 | 107 |
| 109 case Value::TYPE_LIST: | 108 case Value::TYPE_LIST: |
| 110 { | 109 { |
| 111 json_string_->append("["); | 110 json_string_->append("["); |
| 112 if (pretty_print_) | 111 if (pretty_print_) |
| 113 json_string_->append(" "); | 112 json_string_->append(" "); |
| 114 | 113 |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 175 break; | 174 break; |
| 176 } | 175 } |
| 177 | 176 |
| 178 default: | 177 default: |
| 179 // TODO(jhughes): handle TYPE_BINARY | 178 // TODO(jhughes): handle TYPE_BINARY |
| 180 NOTREACHED() << "unknown json type"; | 179 NOTREACHED() << "unknown json type"; |
| 181 } | 180 } |
| 182 } | 181 } |
| 183 | 182 |
| 184 void JSONWriter::AppendQuotedString(const std::wstring& str) { | 183 void JSONWriter::AppendQuotedString(const std::wstring& str) { |
| 185 string_escape::JavascriptDoubleQuote(WideToUTF16Hack(str), | 184 string_escape::JsonDoubleQuote(WideToUTF16Hack(str), |
| 186 true, | 185 true, |
| 187 json_string_); | 186 json_string_); |
| 188 } | 187 } |
| 189 | 188 |
| 190 void JSONWriter::IndentLine(int depth) { | 189 void JSONWriter::IndentLine(int depth) { |
| 191 // It may be faster to keep an indent string so we don't have to keep | 190 // It may be faster to keep an indent string so we don't have to keep |
| 192 // reallocating. | 191 // reallocating. |
| 193 json_string_->append(std::string(depth * 3, ' ')); | 192 json_string_->append(std::string(depth * 3, ' ')); |
| 194 } | 193 } |
| OLD | NEW |