NEC mBaaS Embedded SDK  6.2.0
 全て クラス ネームスペース ファイル 関数 変数 列挙型 列挙型の値
nb_json_array.h
説明を見る。
1 /*
2  * COPYRIGHT (C) 2017 NEC CORPORATION
3  *
4  * ALL RIGHTS RESERVED BY NEC CORPORATION, THIS PROGRAM
5  * MUST BE USED SOLELY FOR THE PURPOSE FOR WHICH IT WAS
6  * FURNISHED BY NEC CORPORATION, NO PART OF THIS PROGRAM
7  * MAY BE REPRODUCED OR DISCLOSED TO OTHERS, IN ANY FORM
8  * WITHOUT THE PRIOR WRITTEN PERMISSION OF NEC CORPORATION.
9  *
10  * NEC CONFIDENTIAL AND PROPRIETARY
11  */
12 
13 #ifndef NECBAAS_NBJSONARRAY_H
14 #define NECBAAS_NBJSONARRAY_H
15 
16 #include <string>
17 #include <vector>
18 #include <limits>
19 #include <json/json.h>
20 #include "necbaas/nb_json_type.h"
21 #include "necbaas/internal/nb_logger.h"
22 
23 namespace necbaas {
24 
25 // 相互参照のため
26 class NbJsonObject;
27 
37 class NbJsonArray {
38  public:
42  NbJsonArray();
43 
50  explicit NbJsonArray(const std::string &json_string);
51 
55  ~NbJsonArray();
56 
63  void PutAll(const std::string &json);
64 
74  template <typename T>
75  void PutAllList(const T &container) {
76  value_.resize(container.size());
77  int i = 0;
78  for (auto container_value : container) {
79  value_[i] = container_value;
80  ++i;
81  }
82  };
83 
96  int GetInt(unsigned int index, int default_value = 0) const;
97 
110  int64_t GetInt64(unsigned int index, int64_t default_value = 0) const;
111 
122  double GetDouble(unsigned int index, double default_value = 0.0) const;
123 
134  bool GetBoolean(unsigned int index, bool default_value = false) const;
135 
146  std::string GetString(unsigned int index, const std::string &default_value = "") const;
147 
157  NbJsonObject GetJsonObject(unsigned int index) const;
158 
168  NbJsonArray GetJsonArray(unsigned int index) const;
169 
183  template <typename T>
184  void GetAllInt(T *out_container, int default_value = 0) const {
185  GetAllList(out_container, default_value, &Json::Value::isNumeric, &Json::Value::asInt);
186  };
187 
201  template <typename T>
202  void GetAllInt64(T *out_container, int64_t default_value = 0) const {
203  GetAllList(out_container, default_value, &Json::Value::isNumeric, &Json::Value::asInt64);
204  };
205 
217  template <typename T>
218  void GetAllDouble(T *out_container, double default_value = 0.0) const {
219  GetAllList(out_container, default_value, &Json::Value::isNumeric, &Json::Value::asDouble);
220  }
221 
233  template <typename T>
234  void GetAllBoolean(T *out_container, bool default_value = false) const {
235  GetAllList(out_container, default_value, &Json::Value::isBool, &Json::Value::asBool);
236  }
237 
249  template <typename T>
250  void GetAllString(T *out_container, const std::string &default_value = "") const {
251  GetAllList(out_container, default_value, &Json::Value::isString, &Json::Value::asString);
252  };
253 
261  const Json::Value &GetSubstitutableValue() const;
262 
285  Json::Value &operator[](unsigned int index);
286 
291  const Json::Value &operator[](unsigned int index) const;
292 
303  bool PutJsonObject(unsigned int index, const NbJsonObject &json_object);
304 
315  bool PutJsonArray(unsigned int index, const NbJsonArray &json_array);
316 
326  bool PutNull(unsigned int index);
327 
345  template <typename T>
346  bool Append(T value) {
347  if (value_.size() == std::numeric_limits<unsigned int>::max()) {
348  // UINTの最大値を超える場合は処理しない
349  return false;
350  }
351  value_[value_.size()] = value;
352  return true;
353  }
354 
364  bool AppendJsonObject(const NbJsonObject &json_object);
365 
375  bool AppendJsonArray(const NbJsonArray &json_array);
376 
385  bool AppendNull();
386 
392  unsigned int GetSize() const;
393 
401  bool IsEmpty() const;
402 
409  NbJsonType GetType(unsigned int index) const;
410 
417  void Remove(unsigned int index);
418 
423  void Clear();
424 
430  std::string ToJsonString() const;
431 
439  void Replace(const Json::Value &value);
440 
444  bool operator==(const NbJsonArray &other) const;
445 
446  private:
447  Json::Value value_;
461  template <typename T, typename U>
462  void GetAllList(T *out_container, const U &default_value, bool (Json::Value::*is_type)(void) const,
463  U (Json::Value::*as_type)(void) const) const {
464  if (out_container == nullptr) {
465  return;
466  }
467  out_container->clear();
468  for (unsigned int i = 0; i < GetSize(); ++i) {
469  if ((value_[i].*is_type)()) {
470  try {
471  out_container->push_back((value_[i].*as_type)());
472  }
473  catch (const Json::LogicError &ex) {
474  NBLOG(ERROR) << ex.what();
475  out_container->push_back(default_value);
476  }
477  } else {
478  out_container->push_back(default_value);
479  }
480  }
481  };
482 };
483 } // namespace necbaas
484 #endif // NECBAAS_NBJSONARRAY_H
bool AppendJsonArray(const NbJsonArray &json_array)
配列末尾に追加(Json配列).
~NbJsonArray()
デストラクタ.
int64_t GetInt64(unsigned int index, int64_t default_value=0) const
64bit整数値取得.
std::string ToJsonString() const
Json文字列変換.
unsigned int GetSize() const
Json配列サイズ取得.
const Json::Value & GetSubstitutableValue() const
[内部処理用]
NbJsonType GetType(unsigned int index) const
Jsonタイプ取得.
bool operator==(const NbJsonArray &other) const
==演算子.
std::string GetString(unsigned int index, const std::string &default_value="") const
文字列取得.
bool AppendJsonObject(const NbJsonObject &json_object)
配列末尾に追加(Jsonオブジェクト).
bool Append(T value)
配列末尾に追加.
Definition: nb_json_array.h:346
void GetAllInt(T *out_container, int default_value=0) const
整数値リスト取得.
Definition: nb_json_array.h:184
NbJsonArray GetJsonArray(unsigned int index) const
Json配列取得.
NbJsonType
Json値のタイプ.
Definition: nb_json_type.h:21
void GetAllDouble(T *out_container, double default_value=0.0) const
浮動小数点値リスト取得.
Definition: nb_json_array.h:218
double GetDouble(unsigned int index, double default_value=0.0) const
浮動小数点値取得.
bool PutJsonObject(unsigned int index, const NbJsonObject &json_object)
Jsonオブジェクト設定.
void PutAll(const std::string &json)
全データセット.
void Remove(unsigned int index)
Index削除.
void Clear()
全データ削除.
void GetAllBoolean(T *out_container, bool default_value=false) const
真偽値リスト取得.
Definition: nb_json_array.h:234
bool GetBoolean(unsigned int index, bool default_value=false) const
真偽値取得.
Jsonオブジェクト.
Definition: nb_json_object.h:34
NbJsonObject GetJsonObject(unsigned int index) const
Jsonオブジェクト取得.
void PutAllList(const T &container)
全データセット(リスト形式).
Definition: nb_json_array.h:75
void GetAllString(T *out_container, const std::string &default_value="") const
文字列リスト取得.
Definition: nb_json_array.h:250
bool PutJsonArray(unsigned int index, const NbJsonArray &json_array)
Json配列設定.
bool AppendNull()
配列末尾に追加(null).
int GetInt(unsigned int index, int default_value=0) const
整数値取得.
NbJsonArray()
コンストラクタ.
bool PutNull(unsigned int index)
null設定.
void GetAllInt64(T *out_container, int64_t default_value=0) const
64bit整数値リスト取得.
Definition: nb_json_array.h:202
bool IsEmpty() const
オブジェクト空確認.
Json::Value & operator[](unsigned int index)
Value設定用添え字演算子.
Json配列.
Definition: nb_json_array.h:37
void Replace(const Json::Value &value)
[内部処理用]