• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  *  Copyright 2004 The WebRTC Project Authors. All rights reserved.
3  *
4  *  Use of this source code is governed by a BSD-style license
5  *  that can be found in the LICENSE file in the root of the source
6  *  tree. An additional intellectual property rights grant can be found
7  *  in the file PATENTS.  All contributing project authors may
8  *  be found in the AUTHORS file in the root of the source tree.
9  */
10 
11 #ifndef WEBRTC_BASE_JSON_H_
12 #define WEBRTC_BASE_JSON_H_
13 
14 #include <string>
15 #include <vector>
16 
17 #if !defined(WEBRTC_EXTERNAL_JSON)
18 #include "json/json.h"
19 #else
20 #include "third_party/jsoncpp/json.h"
21 #endif
22 
23 namespace rtc {
24 
25 ///////////////////////////////////////////////////////////////////////////////
26 // JSON Helpers
27 ///////////////////////////////////////////////////////////////////////////////
28 
29 // Robust conversion operators, better than the ones in JsonCpp.
30 bool GetIntFromJson(const Json::Value& in, int* out);
31 bool GetUIntFromJson(const Json::Value& in, unsigned int* out);
32 bool GetStringFromJson(const Json::Value& in, std::string* out);
33 bool GetBoolFromJson(const Json::Value& in, bool* out);
34 bool GetDoubleFromJson(const Json::Value& in, double* out);
35 
36 // Pull values out of a JSON array.
37 bool GetValueFromJsonArray(const Json::Value& in, size_t n,
38                            Json::Value* out);
39 bool GetIntFromJsonArray(const Json::Value& in, size_t n,
40                          int* out);
41 bool GetUIntFromJsonArray(const Json::Value& in, size_t n,
42                           unsigned int* out);
43 bool GetStringFromJsonArray(const Json::Value& in, size_t n,
44                             std::string* out);
45 bool GetBoolFromJsonArray(const Json::Value& in, size_t n,
46                           bool* out);
47 bool GetDoubleFromJsonArray(const Json::Value& in, size_t n,
48                             double* out);
49 
50 // Convert json arrays to std::vector
51 bool JsonArrayToValueVector(const Json::Value& in,
52                             std::vector<Json::Value>* out);
53 bool JsonArrayToIntVector(const Json::Value& in,
54                           std::vector<int>* out);
55 bool JsonArrayToUIntVector(const Json::Value& in,
56                            std::vector<unsigned int>* out);
57 bool JsonArrayToStringVector(const Json::Value& in,
58                              std::vector<std::string>* out);
59 bool JsonArrayToBoolVector(const Json::Value& in,
60                            std::vector<bool>* out);
61 bool JsonArrayToDoubleVector(const Json::Value& in,
62                              std::vector<double>* out);
63 
64 // Convert std::vector to json array
65 Json::Value ValueVectorToJsonArray(const std::vector<Json::Value>& in);
66 Json::Value IntVectorToJsonArray(const std::vector<int>& in);
67 Json::Value UIntVectorToJsonArray(const std::vector<unsigned int>& in);
68 Json::Value StringVectorToJsonArray(const std::vector<std::string>& in);
69 Json::Value BoolVectorToJsonArray(const std::vector<bool>& in);
70 Json::Value DoubleVectorToJsonArray(const std::vector<double>& in);
71 
72 // Pull values out of a JSON object.
73 bool GetValueFromJsonObject(const Json::Value& in, const std::string& k,
74                             Json::Value* out);
75 bool GetIntFromJsonObject(const Json::Value& in, const std::string& k,
76                           int* out);
77 bool GetUIntFromJsonObject(const Json::Value& in, const std::string& k,
78                            unsigned int* out);
79 bool GetStringFromJsonObject(const Json::Value& in, const std::string& k,
80                              std::string* out);
81 bool GetBoolFromJsonObject(const Json::Value& in, const std::string& k,
82                            bool* out);
83 bool GetDoubleFromJsonObject(const Json::Value& in, const std::string& k,
84                              double* out);
85 
86 // Writes out a Json value as a string.
87 std::string JsonValueToString(const Json::Value& json);
88 
89 }  // namespace rtc
90 
91 #endif  // WEBRTC_BASE_JSON_H_
92