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