Home | History | Annotate | Download | only in chromium
      1 // Copyright 2013 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 "cpp/src/util/json.h"
      6 
      7 #include "base/basictypes.h"
      8 #include "base/json/json_reader.h"
      9 #include "base/logging.h"
     10 #include "base/memory/scoped_ptr.h"
     11 #include "base/values.h"
     12 
     13 namespace i18n {
     14 namespace addressinput {
     15 
     16 namespace {
     17 
     18 class ChromeJson : public Json {
     19  public:
     20   ChromeJson() {}
     21 
     22   virtual ~ChromeJson() {}
     23 
     24   virtual bool ParseObject(const std::string& json) {
     25     dict_.reset();
     26 
     27     // |json| is converted to a |c_str()| here because rapidjson and other parts
     28     // of the standalone library use char* rather than std::string.
     29     scoped_ptr<base::Value> parsed(base::JSONReader::Read(json.c_str()));
     30     if (parsed && parsed->IsType(base::Value::TYPE_DICTIONARY))
     31       dict_.reset(static_cast<base::DictionaryValue*>(parsed.release()));
     32 
     33     return !!dict_;
     34   }
     35 
     36   virtual bool HasStringValueForKey(const std::string& key) const {
     37     base::Value* val = NULL;
     38     dict_->GetWithoutPathExpansion(key, &val);
     39     return val && val->IsType(base::Value::TYPE_STRING);
     40   }
     41 
     42   virtual std::string GetStringValueForKey(const std::string& key) const {
     43     std::string result;
     44     dict_->GetStringWithoutPathExpansion(key, &result);
     45     return result;
     46   }
     47 
     48  private:
     49   scoped_ptr<base::DictionaryValue> dict_;
     50 
     51   DISALLOW_COPY_AND_ASSIGN(ChromeJson);
     52 };
     53 
     54 }  // namespace
     55 
     56 Json::~Json() {}
     57 
     58 // static
     59 Json* Json::Build() {
     60   return new ChromeJson;
     61 }
     62 
     63 Json::Json() {}
     64 
     65 }  // namespace addressinput
     66 }  // namespace i18n
     67