147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org/* 247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org * Copyright 2004 The WebRTC Project Authors. All rights reserved. 347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org * 447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org * Use of this source code is governed by a BSD-style license 547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org * that can be found in the LICENSE file in the root of the source 647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org * tree. An additional intellectual property rights grant can be found 747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org * in the file PATENTS. All contributing project authors may 847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org * be found in the AUTHORS file in the root of the source tree. 947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org */ 1047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 1147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#include "webrtc/base/json.h" 1247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 1347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#include <errno.h> 1447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#include <limits.h> 1547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#include <stdlib.h> 1647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 1747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#include <sstream> 1847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 1947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgbool GetStringFromJson(const Json::Value& in, std::string* out) { 2047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org if (!in.isString()) { 2147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org std::ostringstream s; 2247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org if (in.isBool()) { 2347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org s << std::boolalpha << in.asBool(); 2447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org } else if (in.isInt()) { 2547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org s << in.asInt(); 2647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org } else if (in.isUInt()) { 2747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org s << in.asUInt(); 2847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org } else if (in.isDouble()) { 2947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org s << in.asDouble(); 3047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org } else { 3147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org return false; 3247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org } 3347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org *out = s.str(); 3447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org } else { 3547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org *out = in.asString(); 3647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org } 3747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org return true; 3847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org} 3947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 4047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgbool GetIntFromJson(const Json::Value& in, int* out) { 4147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org bool ret; 4247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org if (!in.isString()) { 4347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org ret = in.isConvertibleTo(Json::intValue); 4447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org if (ret) { 4547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org *out = in.asInt(); 4647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org } 4747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org } else { 4847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org long val; // NOLINT 4947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org const char* c_str = in.asCString(); 5047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org char* end_ptr; 5147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org errno = 0; 5247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org val = strtol(c_str, &end_ptr, 10); // NOLINT 5347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org ret = (end_ptr != c_str && *end_ptr == '\0' && !errno && 5447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org val >= INT_MIN && val <= INT_MAX); 5547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org *out = val; 5647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org } 5747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org return ret; 5847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org} 5947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 6047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgbool GetUIntFromJson(const Json::Value& in, unsigned int* out) { 6147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org bool ret; 6247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org if (!in.isString()) { 6347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org ret = in.isConvertibleTo(Json::uintValue); 6447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org if (ret) { 6547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org *out = in.asUInt(); 6647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org } 6747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org } else { 6847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org unsigned long val; // NOLINT 6947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org const char* c_str = in.asCString(); 7047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org char* end_ptr; 7147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org errno = 0; 7247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org val = strtoul(c_str, &end_ptr, 10); // NOLINT 7347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org ret = (end_ptr != c_str && *end_ptr == '\0' && !errno && 7447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org val <= UINT_MAX); 7547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org *out = val; 7647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org } 7747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org return ret; 7847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org} 7947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 8047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgbool GetBoolFromJson(const Json::Value& in, bool* out) { 8147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org bool ret; 8247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org if (!in.isString()) { 8347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org ret = in.isConvertibleTo(Json::booleanValue); 8447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org if (ret) { 8547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org *out = in.asBool(); 8647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org } 8747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org } else { 8847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org if (in.asString() == "true") { 8947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org *out = true; 9047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org ret = true; 9147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org } else if (in.asString() == "false") { 9247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org *out = false; 9347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org ret = true; 9447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org } else { 9547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org ret = false; 9647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org } 9747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org } 9847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org return ret; 9947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org} 10047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 10147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgbool GetDoubleFromJson(const Json::Value& in, double* out) { 10247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org bool ret; 10347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org if (!in.isString()) { 10447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org ret = in.isConvertibleTo(Json::realValue); 10547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org if (ret) { 10647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org *out = in.asDouble(); 10747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org } 10847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org } else { 10947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org double val; 11047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org const char* c_str = in.asCString(); 11147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org char* end_ptr; 11247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org errno = 0; 11347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org val = strtod(c_str, &end_ptr); 11447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org ret = (end_ptr != c_str && *end_ptr == '\0' && !errno); 11547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org *out = val; 11647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org } 11747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org return ret; 11847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org} 11947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 12047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgnamespace { 12147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgtemplate<typename T> 12247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgbool JsonArrayToVector(const Json::Value& value, 12347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org bool (*getter)(const Json::Value& in, T* out), 12447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org std::vector<T> *vec) { 12547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org vec->clear(); 12647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org if (!value.isArray()) { 12747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org return false; 12847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org } 12947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 13047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org for (Json::Value::ArrayIndex i = 0; i < value.size(); ++i) { 13147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org T val; 13247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org if (!getter(value[i], &val)) { 13347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org return false; 13447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org } 13547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org vec->push_back(val); 13647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org } 13747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 13847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org return true; 13947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org} 14047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// Trivial getter helper 14147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgbool GetValueFromJson(const Json::Value& in, Json::Value* out) { 14247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org *out = in; 14347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org return true; 14447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org} 14547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org} // unnamed namespace 14647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 14747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgbool JsonArrayToValueVector(const Json::Value& in, 14847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org std::vector<Json::Value>* out) { 14947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org return JsonArrayToVector(in, GetValueFromJson, out); 15047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org} 15147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 15247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgbool JsonArrayToIntVector(const Json::Value& in, 15347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org std::vector<int>* out) { 15447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org return JsonArrayToVector(in, GetIntFromJson, out); 15547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org} 15647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 15747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgbool JsonArrayToUIntVector(const Json::Value& in, 15847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org std::vector<unsigned int>* out) { 15947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org return JsonArrayToVector(in, GetUIntFromJson, out); 16047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org} 16147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 16247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgbool JsonArrayToStringVector(const Json::Value& in, 16347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org std::vector<std::string>* out) { 16447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org return JsonArrayToVector(in, GetStringFromJson, out); 16547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org} 16647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 16747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgbool JsonArrayToBoolVector(const Json::Value& in, 16847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org std::vector<bool>* out) { 16947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org return JsonArrayToVector(in, GetBoolFromJson, out); 17047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org} 17147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 17247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgbool JsonArrayToDoubleVector(const Json::Value& in, 17347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org std::vector<double>* out) { 17447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org return JsonArrayToVector(in, GetDoubleFromJson, out); 17547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org} 17647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 17747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgnamespace { 17847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgtemplate<typename T> 17947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgJson::Value VectorToJsonArray(const std::vector<T>& vec) { 18047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org Json::Value result(Json::arrayValue); 18147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org for (size_t i = 0; i < vec.size(); ++i) { 18247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org result.append(Json::Value(vec[i])); 18347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org } 18447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org return result; 18547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org} 18647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org} // unnamed namespace 18747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 18847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgJson::Value ValueVectorToJsonArray(const std::vector<Json::Value>& in) { 18947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org return VectorToJsonArray(in); 19047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org} 19147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 19247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgJson::Value IntVectorToJsonArray(const std::vector<int>& in) { 19347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org return VectorToJsonArray(in); 19447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org} 19547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 19647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgJson::Value UIntVectorToJsonArray(const std::vector<unsigned int>& in) { 19747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org return VectorToJsonArray(in); 19847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org} 19947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 20047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgJson::Value StringVectorToJsonArray(const std::vector<std::string>& in) { 20147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org return VectorToJsonArray(in); 20247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org} 20347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 20447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgJson::Value BoolVectorToJsonArray(const std::vector<bool>& in) { 20547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org return VectorToJsonArray(in); 20647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org} 20747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 20847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgJson::Value DoubleVectorToJsonArray(const std::vector<double>& in) { 20947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org return VectorToJsonArray(in); 21047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org} 21147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 21247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgbool GetValueFromJsonArray(const Json::Value& in, size_t n, 21347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org Json::Value* out) { 21447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org if (!in.isArray() || !in.isValidIndex(static_cast<int>(n))) { 21547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org return false; 21647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org } 21747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 21847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org *out = in[static_cast<Json::Value::ArrayIndex>(n)]; 21947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org return true; 22047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org} 22147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 22247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgbool GetIntFromJsonArray(const Json::Value& in, size_t n, 22347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org int* out) { 22447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org Json::Value x; 22547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org return GetValueFromJsonArray(in, n, &x) && GetIntFromJson(x, out); 22647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org} 22747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 22847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgbool GetUIntFromJsonArray(const Json::Value& in, size_t n, 22947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org unsigned int* out) { 23047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org Json::Value x; 23147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org return GetValueFromJsonArray(in, n, &x) && GetUIntFromJson(x, out); 23247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org} 23347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 23447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgbool GetStringFromJsonArray(const Json::Value& in, size_t n, 23547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org std::string* out) { 23647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org Json::Value x; 23747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org return GetValueFromJsonArray(in, n, &x) && GetStringFromJson(x, out); 23847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org} 23947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 24047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgbool GetBoolFromJsonArray(const Json::Value& in, size_t n, 24147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org bool* out) { 24247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org Json::Value x; 24347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org return GetValueFromJsonArray(in, n, &x) && GetBoolFromJson(x, out); 24447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org} 24547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 24647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgbool GetDoubleFromJsonArray(const Json::Value& in, size_t n, 24747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org double* out) { 24847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org Json::Value x; 24947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org return GetValueFromJsonArray(in, n, &x) && GetDoubleFromJson(x, out); 25047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org} 25147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 25247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgbool GetValueFromJsonObject(const Json::Value& in, const std::string& k, 25347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org Json::Value* out) { 25447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org if (!in.isObject() || !in.isMember(k)) { 25547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org return false; 25647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org } 25747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 25847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org *out = in[k]; 25947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org return true; 26047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org} 26147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 26247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgbool GetIntFromJsonObject(const Json::Value& in, const std::string& k, 26347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org int* out) { 26447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org Json::Value x; 26547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org return GetValueFromJsonObject(in, k, &x) && GetIntFromJson(x, out); 26647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org} 26747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 26847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgbool GetUIntFromJsonObject(const Json::Value& in, const std::string& k, 26947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org unsigned int* out) { 27047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org Json::Value x; 27147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org return GetValueFromJsonObject(in, k, &x) && GetUIntFromJson(x, out); 27247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org} 27347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 27447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgbool GetStringFromJsonObject(const Json::Value& in, const std::string& k, 27547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org std::string* out) { 27647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org Json::Value x; 27747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org return GetValueFromJsonObject(in, k, &x) && GetStringFromJson(x, out); 27847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org} 27947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 28047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgbool GetBoolFromJsonObject(const Json::Value& in, const std::string& k, 28147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org bool* out) { 28247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org Json::Value x; 28347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org return GetValueFromJsonObject(in, k, &x) && GetBoolFromJson(x, out); 28447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org} 28547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 28647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgbool GetDoubleFromJsonObject(const Json::Value& in, const std::string& k, 28747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org double* out) { 28847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org Json::Value x; 28947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org return GetValueFromJsonObject(in, k, &x) && GetDoubleFromJson(x, out); 29047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org} 29147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 29247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgstd::string JsonValueToString(const Json::Value& json) { 29347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org Json::FastWriter w; 29447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org std::string value = w.write(json); 29547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org return value.substr(0, value.size() - 1); // trim trailing newline 29647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org} 297