1f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org/* 2f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org * Copyright 2004 The WebRTC Project Authors. All rights reserved. 3f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org * 4f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org * Use of this source code is governed by a BSD-style license 5f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org * that can be found in the LICENSE file in the root of the source 6f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org * tree. An additional intellectual property rights grant can be found 7f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org * in the file PATENTS. All contributing project authors may 8f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org * be found in the AUTHORS file in the root of the source tree. 9f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org */ 10f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 11f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org#include "webrtc/base/json.h" 12f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 13f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org#include <errno.h> 14f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org#include <limits.h> 15f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org#include <stdlib.h> 16f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 17f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org#include <sstream> 18f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 19cb76b895728c888c60cf474070fff6aee4f8731cThiago Farinanamespace rtc { 20cb76b895728c888c60cf474070fff6aee4f8731cThiago Farina 21f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.orgbool GetStringFromJson(const Json::Value& in, std::string* out) { 22f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org if (!in.isString()) { 23f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org std::ostringstream s; 24f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org if (in.isBool()) { 25f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org s << std::boolalpha << in.asBool(); 26f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org } else if (in.isInt()) { 27f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org s << in.asInt(); 28f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org } else if (in.isUInt()) { 29f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org s << in.asUInt(); 30f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org } else if (in.isDouble()) { 31f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org s << in.asDouble(); 32f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org } else { 33f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org return false; 34f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org } 35f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org *out = s.str(); 36f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org } else { 37f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org *out = in.asString(); 38f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org } 39f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org return true; 40f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org} 41f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 42f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.orgbool GetIntFromJson(const Json::Value& in, int* out) { 43f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org bool ret; 44f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org if (!in.isString()) { 45f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org ret = in.isConvertibleTo(Json::intValue); 46f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org if (ret) { 47f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org *out = in.asInt(); 48f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org } 49f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org } else { 50f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org long val; // NOLINT 51f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org const char* c_str = in.asCString(); 52f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org char* end_ptr; 53f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org errno = 0; 54f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org val = strtol(c_str, &end_ptr, 10); // NOLINT 55f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org ret = (end_ptr != c_str && *end_ptr == '\0' && !errno && 56f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org val >= INT_MIN && val <= INT_MAX); 57f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org *out = val; 58f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org } 59f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org return ret; 60f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org} 61f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 62f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.orgbool GetUIntFromJson(const Json::Value& in, unsigned int* out) { 63f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org bool ret; 64f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org if (!in.isString()) { 65f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org ret = in.isConvertibleTo(Json::uintValue); 66f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org if (ret) { 67f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org *out = in.asUInt(); 68f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org } 69f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org } else { 70f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org unsigned long val; // NOLINT 71f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org const char* c_str = in.asCString(); 72f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org char* end_ptr; 73f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org errno = 0; 74f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org val = strtoul(c_str, &end_ptr, 10); // NOLINT 75f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org ret = (end_ptr != c_str && *end_ptr == '\0' && !errno && 76f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org val <= UINT_MAX); 77f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org *out = val; 78f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org } 79f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org return ret; 80f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org} 81f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 82f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.orgbool GetBoolFromJson(const Json::Value& in, bool* out) { 83f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org bool ret; 84f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org if (!in.isString()) { 85f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org ret = in.isConvertibleTo(Json::booleanValue); 86f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org if (ret) { 87f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org *out = in.asBool(); 88f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org } 89f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org } else { 90f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org if (in.asString() == "true") { 91f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org *out = true; 92f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org ret = true; 93f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org } else if (in.asString() == "false") { 94f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org *out = false; 95f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org ret = true; 96f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org } else { 97f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org ret = false; 98f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org } 99f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org } 100f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org return ret; 101f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org} 102f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 103f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.orgbool GetDoubleFromJson(const Json::Value& in, double* out) { 104f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org bool ret; 105f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org if (!in.isString()) { 106f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org ret = in.isConvertibleTo(Json::realValue); 107f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org if (ret) { 108f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org *out = in.asDouble(); 109f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org } 110f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org } else { 111f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org double val; 112f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org const char* c_str = in.asCString(); 113f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org char* end_ptr; 114f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org errno = 0; 115f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org val = strtod(c_str, &end_ptr); 116f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org ret = (end_ptr != c_str && *end_ptr == '\0' && !errno); 117f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org *out = val; 118f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org } 119f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org return ret; 120f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org} 121f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 122f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.orgnamespace { 123f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.orgtemplate<typename T> 124f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.orgbool JsonArrayToVector(const Json::Value& value, 125f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org bool (*getter)(const Json::Value& in, T* out), 126f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org std::vector<T> *vec) { 127f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org vec->clear(); 128f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org if (!value.isArray()) { 129f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org return false; 130f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org } 131f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 132f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org for (Json::Value::ArrayIndex i = 0; i < value.size(); ++i) { 133f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org T val; 134f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org if (!getter(value[i], &val)) { 135f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org return false; 136f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org } 137f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org vec->push_back(val); 138f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org } 139f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 140f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org return true; 141f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org} 142f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org// Trivial getter helper 143f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.orgbool GetValueFromJson(const Json::Value& in, Json::Value* out) { 144f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org *out = in; 145f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org return true; 146f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org} 147f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org} // unnamed namespace 148f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 149f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.orgbool JsonArrayToValueVector(const Json::Value& in, 150f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org std::vector<Json::Value>* out) { 151f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org return JsonArrayToVector(in, GetValueFromJson, out); 152f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org} 153f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 154f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.orgbool JsonArrayToIntVector(const Json::Value& in, 155f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org std::vector<int>* out) { 156f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org return JsonArrayToVector(in, GetIntFromJson, out); 157f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org} 158f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 159f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.orgbool JsonArrayToUIntVector(const Json::Value& in, 160f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org std::vector<unsigned int>* out) { 161f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org return JsonArrayToVector(in, GetUIntFromJson, out); 162f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org} 163f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 164f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.orgbool JsonArrayToStringVector(const Json::Value& in, 165f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org std::vector<std::string>* out) { 166f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org return JsonArrayToVector(in, GetStringFromJson, out); 167f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org} 168f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 169f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.orgbool JsonArrayToBoolVector(const Json::Value& in, 170f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org std::vector<bool>* out) { 171f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org return JsonArrayToVector(in, GetBoolFromJson, out); 172f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org} 173f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 174f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.orgbool JsonArrayToDoubleVector(const Json::Value& in, 175f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org std::vector<double>* out) { 176f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org return JsonArrayToVector(in, GetDoubleFromJson, out); 177f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org} 178f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 179f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.orgnamespace { 180f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.orgtemplate<typename T> 181f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.orgJson::Value VectorToJsonArray(const std::vector<T>& vec) { 182f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org Json::Value result(Json::arrayValue); 183f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org for (size_t i = 0; i < vec.size(); ++i) { 184f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org result.append(Json::Value(vec[i])); 185f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org } 186f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org return result; 187f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org} 188f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org} // unnamed namespace 189f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 190f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.orgJson::Value ValueVectorToJsonArray(const std::vector<Json::Value>& in) { 191f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org return VectorToJsonArray(in); 192f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org} 193f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 194f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.orgJson::Value IntVectorToJsonArray(const std::vector<int>& in) { 195f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org return VectorToJsonArray(in); 196f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org} 197f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 198f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.orgJson::Value UIntVectorToJsonArray(const std::vector<unsigned int>& in) { 199f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org return VectorToJsonArray(in); 200f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org} 201f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 202f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.orgJson::Value StringVectorToJsonArray(const std::vector<std::string>& in) { 203f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org return VectorToJsonArray(in); 204f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org} 205f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 206f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.orgJson::Value BoolVectorToJsonArray(const std::vector<bool>& in) { 207f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org return VectorToJsonArray(in); 208f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org} 209f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 210f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.orgJson::Value DoubleVectorToJsonArray(const std::vector<double>& in) { 211f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org return VectorToJsonArray(in); 212f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org} 213f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 214f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.orgbool GetValueFromJsonArray(const Json::Value& in, size_t n, 215f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org Json::Value* out) { 216f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org if (!in.isArray() || !in.isValidIndex(static_cast<int>(n))) { 217f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org return false; 218f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org } 219f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 220f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org *out = in[static_cast<Json::Value::ArrayIndex>(n)]; 221f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org return true; 222f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org} 223f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 224f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.orgbool GetIntFromJsonArray(const Json::Value& in, size_t n, 225f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org int* out) { 226f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org Json::Value x; 227f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org return GetValueFromJsonArray(in, n, &x) && GetIntFromJson(x, out); 228f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org} 229f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 230f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.orgbool GetUIntFromJsonArray(const Json::Value& in, size_t n, 231f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org unsigned int* out) { 232f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org Json::Value x; 233f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org return GetValueFromJsonArray(in, n, &x) && GetUIntFromJson(x, out); 234f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org} 235f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 236f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.orgbool GetStringFromJsonArray(const Json::Value& in, size_t n, 237f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org std::string* out) { 238f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org Json::Value x; 239f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org return GetValueFromJsonArray(in, n, &x) && GetStringFromJson(x, out); 240f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org} 241f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 242f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.orgbool GetBoolFromJsonArray(const Json::Value& in, size_t n, 243f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org bool* out) { 244f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org Json::Value x; 245f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org return GetValueFromJsonArray(in, n, &x) && GetBoolFromJson(x, out); 246f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org} 247f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 248f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.orgbool GetDoubleFromJsonArray(const Json::Value& in, size_t n, 249f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org double* out) { 250f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org Json::Value x; 251f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org return GetValueFromJsonArray(in, n, &x) && GetDoubleFromJson(x, out); 252f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org} 253f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 254f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.orgbool GetValueFromJsonObject(const Json::Value& in, const std::string& k, 255f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org Json::Value* out) { 256f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org if (!in.isObject() || !in.isMember(k)) { 257f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org return false; 258f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org } 259f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 260f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org *out = in[k]; 261f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org return true; 262f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org} 263f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 264f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.orgbool GetIntFromJsonObject(const Json::Value& in, const std::string& k, 265f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org int* out) { 266f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org Json::Value x; 267f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org return GetValueFromJsonObject(in, k, &x) && GetIntFromJson(x, out); 268f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org} 269f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 270f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.orgbool GetUIntFromJsonObject(const Json::Value& in, const std::string& k, 271f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org unsigned int* out) { 272f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org Json::Value x; 273f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org return GetValueFromJsonObject(in, k, &x) && GetUIntFromJson(x, out); 274f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org} 275f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 276f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.orgbool GetStringFromJsonObject(const Json::Value& in, const std::string& k, 277f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org std::string* out) { 278f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org Json::Value x; 279f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org return GetValueFromJsonObject(in, k, &x) && GetStringFromJson(x, out); 280f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org} 281f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 282f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.orgbool GetBoolFromJsonObject(const Json::Value& in, const std::string& k, 283f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org bool* out) { 284f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org Json::Value x; 285f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org return GetValueFromJsonObject(in, k, &x) && GetBoolFromJson(x, out); 286f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org} 287f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 288f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.orgbool GetDoubleFromJsonObject(const Json::Value& in, const std::string& k, 289f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org double* out) { 290f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org Json::Value x; 291f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org return GetValueFromJsonObject(in, k, &x) && GetDoubleFromJson(x, out); 292f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org} 293f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 294f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.orgstd::string JsonValueToString(const Json::Value& json) { 295f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org Json::FastWriter w; 296f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org std::string value = w.write(json); 297f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org return value.substr(0, value.size() - 1); // trim trailing newline 298f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org} 299cb76b895728c888c60cf474070fff6aee4f8731cThiago Farina 300cb76b895728c888c60cf474070fff6aee4f8731cThiago Farina} // namespace rtc 301