1c49156d6c80a08cc55ed968e4ab3a616409e72bcrouslan@chromium.org// Copyright (C) 2013 Google Inc. 2c49156d6c80a08cc55ed968e4ab3a616409e72bcrouslan@chromium.org// 3c49156d6c80a08cc55ed968e4ab3a616409e72bcrouslan@chromium.org// Licensed under the Apache License, Version 2.0 (the "License"); 4c49156d6c80a08cc55ed968e4ab3a616409e72bcrouslan@chromium.org// you may not use this file except in compliance with the License. 5c49156d6c80a08cc55ed968e4ab3a616409e72bcrouslan@chromium.org// You may obtain a copy of the License at 6c49156d6c80a08cc55ed968e4ab3a616409e72bcrouslan@chromium.org// 7c49156d6c80a08cc55ed968e4ab3a616409e72bcrouslan@chromium.org// http://www.apache.org/licenses/LICENSE-2.0 8c49156d6c80a08cc55ed968e4ab3a616409e72bcrouslan@chromium.org// 9c49156d6c80a08cc55ed968e4ab3a616409e72bcrouslan@chromium.org// Unless required by applicable law or agreed to in writing, software 10c49156d6c80a08cc55ed968e4ab3a616409e72bcrouslan@chromium.org// distributed under the License is distributed on an "AS IS" BASIS, 11c49156d6c80a08cc55ed968e4ab3a616409e72bcrouslan@chromium.org// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12c49156d6c80a08cc55ed968e4ab3a616409e72bcrouslan@chromium.org// See the License for the specific language governing permissions and 13c49156d6c80a08cc55ed968e4ab3a616409e72bcrouslan@chromium.org// limitations under the License. 14c49156d6c80a08cc55ed968e4ab3a616409e72bcrouslan@chromium.org 15c49156d6c80a08cc55ed968e4ab3a616409e72bcrouslan@chromium.org#ifndef I18N_ADDRESSINPUT_UTIL_JSON_H_ 16c49156d6c80a08cc55ed968e4ab3a616409e72bcrouslan@chromium.org#define I18N_ADDRESSINPUT_UTIL_JSON_H_ 17c49156d6c80a08cc55ed968e4ab3a616409e72bcrouslan@chromium.org 18c49156d6c80a08cc55ed968e4ab3a616409e72bcrouslan@chromium.org#include <libaddressinput/util/basictypes.h> 19c49156d6c80a08cc55ed968e4ab3a616409e72bcrouslan@chromium.org#include <libaddressinput/util/scoped_ptr.h> 20c49156d6c80a08cc55ed968e4ab3a616409e72bcrouslan@chromium.org 21c49156d6c80a08cc55ed968e4ab3a616409e72bcrouslan@chromium.org#include <string> 227825966d9566c8ced01471f1e6e6bf1e715f6572rouslan@chromium.org#include <vector> 23c49156d6c80a08cc55ed968e4ab3a616409e72bcrouslan@chromium.org 24c49156d6c80a08cc55ed968e4ab3a616409e72bcrouslan@chromium.orgnamespace i18n { 25c49156d6c80a08cc55ed968e4ab3a616409e72bcrouslan@chromium.orgnamespace addressinput { 26c49156d6c80a08cc55ed968e4ab3a616409e72bcrouslan@chromium.org 27c49156d6c80a08cc55ed968e4ab3a616409e72bcrouslan@chromium.org// Parses a JSON dictionary of strings. Sample usage: 28c49156d6c80a08cc55ed968e4ab3a616409e72bcrouslan@chromium.org// Json json; 29c49156d6c80a08cc55ed968e4ab3a616409e72bcrouslan@chromium.org// if (json.ParseObject("{'key1':'value1', 'key2':'value2'}") && 30c49156d6c80a08cc55ed968e4ab3a616409e72bcrouslan@chromium.org// json.HasStringKey("key1")) { 31c49156d6c80a08cc55ed968e4ab3a616409e72bcrouslan@chromium.org// Process(json.GetStringValueForKey("key1")); 32c49156d6c80a08cc55ed968e4ab3a616409e72bcrouslan@chromium.org// } 33c49156d6c80a08cc55ed968e4ab3a616409e72bcrouslan@chromium.orgclass Json { 34c49156d6c80a08cc55ed968e4ab3a616409e72bcrouslan@chromium.org public: 35c49156d6c80a08cc55ed968e4ab3a616409e72bcrouslan@chromium.org Json(); 36c49156d6c80a08cc55ed968e4ab3a616409e72bcrouslan@chromium.org ~Json(); 37c49156d6c80a08cc55ed968e4ab3a616409e72bcrouslan@chromium.org 38c49156d6c80a08cc55ed968e4ab3a616409e72bcrouslan@chromium.org // Parses the |json| string and returns true if |json| is valid and it is an 39c49156d6c80a08cc55ed968e4ab3a616409e72bcrouslan@chromium.org // object. 40c49156d6c80a08cc55ed968e4ab3a616409e72bcrouslan@chromium.org bool ParseObject(const std::string& json); 41c49156d6c80a08cc55ed968e4ab3a616409e72bcrouslan@chromium.org 420ddcd24a82f60578ab843feae5bea5545989cb96rouslan@chromium.org // Returns the list of sub dictionaries. The JSON object must be parsed 430ddcd24a82f60578ab843feae5bea5545989cb96rouslan@chromium.org // successfully in ParseObject() before invoking this method. The caller does 440ddcd24a82f60578ab843feae5bea5545989cb96rouslan@chromium.org // not own the result. 450ddcd24a82f60578ab843feae5bea5545989cb96rouslan@chromium.org const std::vector<const Json*>& GetSubDictionaries() const; 467825966d9566c8ced01471f1e6e6bf1e715f6572rouslan@chromium.org 47f924b7dfea039ad262f25c2d19fb9bd4905b96e8rouslan@chromium.org // Returns true if the parsed JSON contains a string value for |key|. Sets 48f924b7dfea039ad262f25c2d19fb9bd4905b96e8rouslan@chromium.org // |value| to the string value of the |key|. The JSON object must be parsed 49f924b7dfea039ad262f25c2d19fb9bd4905b96e8rouslan@chromium.org // successfully in ParseObject() before invoking this method. The |value| 50f924b7dfea039ad262f25c2d19fb9bd4905b96e8rouslan@chromium.org // parameter should not be NULL. 51f924b7dfea039ad262f25c2d19fb9bd4905b96e8rouslan@chromium.org bool GetStringValueForKey(const std::string& key, std::string* value) const; 52c49156d6c80a08cc55ed968e4ab3a616409e72bcrouslan@chromium.org 53c49156d6c80a08cc55ed968e4ab3a616409e72bcrouslan@chromium.org private: 54348b3a8d3d70b6109e4692d52f405ead7f6568b8rouslan@chromium.org class JsonImpl; 55c221e308b9aed6571526a92c98e163709a5d93d4roubert@google.com friend class JsonImpl; 56c221e308b9aed6571526a92c98e163709a5d93d4roubert@google.com 57c221e308b9aed6571526a92c98e163709a5d93d4roubert@google.com // Constructor to be called by JsonImpl. 58c221e308b9aed6571526a92c98e163709a5d93d4roubert@google.com explicit Json(JsonImpl* impl); 59c221e308b9aed6571526a92c98e163709a5d93d4roubert@google.com 60348b3a8d3d70b6109e4692d52f405ead7f6568b8rouslan@chromium.org scoped_ptr<JsonImpl> impl_; 61c49156d6c80a08cc55ed968e4ab3a616409e72bcrouslan@chromium.org 62c49156d6c80a08cc55ed968e4ab3a616409e72bcrouslan@chromium.org DISALLOW_COPY_AND_ASSIGN(Json); 63c49156d6c80a08cc55ed968e4ab3a616409e72bcrouslan@chromium.org}; 64c49156d6c80a08cc55ed968e4ab3a616409e72bcrouslan@chromium.org 65c49156d6c80a08cc55ed968e4ab3a616409e72bcrouslan@chromium.org} // namespace addressinput 66c49156d6c80a08cc55ed968e4ab3a616409e72bcrouslan@chromium.org} // namespace i18n 67c49156d6c80a08cc55ed968e4ab3a616409e72bcrouslan@chromium.org 68c49156d6c80a08cc55ed968e4ab3a616409e72bcrouslan@chromium.org#endif // I18N_ADDRESSINPUT_UTIL_JSON_H_ 69