Solution46
CJsonDocument.h
[詳解]
1 //=============================================================================
2 /// @file
3 /// JSONドキュメントクラスヘッダファイル
4 ///
5 /// JSONドキュメントクラスヘッダファイルです。
6 ///
7 /// $Id: CJsonDocument.h 245 2019-03-20 15:03:41Z admin $
8 /// $Date: 2019-03-21 00:03:41 +0900 (2019/03/21 (木)) $
9 /// $Author: admin $
10 ///
11 /// @attention なし
12 
13 #pragma once
14 #pragma managed( push, off )
15 
16 //=============================================================================
17 // インクルードファイル
18 #include <CJson.h>
19 #include <CString.h>
20 #include <CStream.h>
21 
22 //=============================================================================
23 // JSONライブラリ名前空間
24 namespace LibJson {
25  //=========================================================================
26  /// JSONドキュメントクラス
27  ///
28  /// JSONドキュメントクラスです。
29  ///
30  /// @attention なし
31  ///
33  //=====================================================================
34  // 構築子と解体子
35  public:
36  //---------------------------------------------------------------------
37  /// コンストラクタ
38  ///
39  /// コンストラクタです。
40  ///
41  /// @param[in] pcJson JSONクラスポインタ
42  /// @return なし
43  /// @attention なし
44  ///
45  explicit CJsonDocument( CJson* pcJson = nullptr ) noexcept;
46 
47  //---------------------------------------------------------------------
48  /// デストラクタ
49  ///
50  /// デストラクタです。
51  ///
52  /// @param なし
53  /// @return なし
54  /// @attention なし
55  ///
56  virtual ~CJsonDocument() noexcept;
57 
58  //=====================================================================
59  // インライン公開関数
60  public:
61  //---------------------------------------------------------------------
62  /// 空状態取得関数
63  ///
64  /// 空状態取得関数です。
65  ///
66  /// @param なし
67  /// @return 実行結果
68  /// - true 空である
69  /// - false 空でない
70  /// @attention なし
71  ///
72  inline virtual bool IsEmpty() noexcept { return ( nullptr == m_pcJsonRoot ); }
73 
74  //=====================================================================
75  // 公開関数
76  public:
77  //---------------------------------------------------------------------
78  /// ルートJSONクラス取得関数
79  ///
80  /// ルートJSONクラス取得関数です。
81  ///
82  /// @param なし
83  /// @return JSONクラスポインタ
84  /// @attention なし
85  ///
86  virtual CJson* GetRootJson() noexcept { return m_pcJsonRoot; }
87 
88  //---------------------------------------------------------------------
89  /// ルートJSONクラス設定関数
90  ///
91  /// ルートJSONクラス設定関数です。
92  ///
93  /// @param[in] pcJson JSONクラスポインタ
94  /// @return 実行結果
95  /// - true 成功
96  /// - false 失敗
97  /// @attention なし
98  ///
99  virtual bool SetRootJson( CJson* pcJson ) noexcept;
100 
101  //---------------------------------------------------------------------
102  /// カレントJSONクラス取得関数
103  ///
104  /// カレントJSONクラス取得関数です。
105  ///
106  /// @param なし
107  /// @return JSONクラスポインタ
108  /// @attention なし
109  ///
110  virtual CJson* GetCurrentJson() noexcept { return m_pcJsonCurrent; }
111 
112  //---------------------------------------------------------------------
113  /// カレントJSONクラス設定関数
114  ///
115  /// カレントJSONクラス設定関数です。
116  ///
117  /// @param[in] pcJson JSONクラスポインタ
118  /// @return 実行結果
119  /// - true 成功
120  /// - false 失敗
121  /// @attention なし
122  ///
123  virtual bool SetCurrentJson( CJson* pcJson ) noexcept;
124 
125  //---------------------------------------------------------------------
126  /// クリア関数
127  ///
128  /// クリア関数です。
129  ///
130  /// @param なし
131  /// @return なし
132  /// @attention なし
133  ///
134  virtual void ClearDocument() noexcept;
135 
136  //---------------------------------------------------------------------
137  /// コンパクト化関数
138  ///
139  /// コンパクト化関数です。
140  ///
141  /// @param なし
142  /// @return 実行結果
143  /// - true 成功
144  /// - false 失敗
145  /// @attention なし
146  ///
147  virtual bool CompactDocument() noexcept;
148 
149  //---------------------------------------------------------------------
150  /// JSONドキュメント入力関数
151  ///
152  /// JSONドキュメント入力関数です。
153  ///
154  /// @param[in] rcStream 入力ストリーム参照
155  /// @return 実行結果
156  /// - true 成功
157  /// - false 失敗
158  /// @attention なし
159  ///
160  virtual bool InputDocument( CStream& rcStream ) noexcept;
161 
162  //---------------------------------------------------------------------
163  /// JSONドキュメント出力関数
164  ///
165  /// JSONドキュメント出力関数です。
166  ///
167  /// @param[in] rcStreamOut 出力ストリーム参照
168  /// @return 実行結果
169  /// - true 成功
170  /// - false 失敗
171  /// @attention なし
172  ///
173  virtual bool OutputDocument( CStreamOut& rcStreamOut ) noexcept;
174 
175  //---------------------------------------------------------------------
176  /// カレントJSONクラス削除関数
177  ///
178  /// カレントJSONクラス削除関数です。
179  ///
180  /// @param なし
181  /// @return 実行結果
182  /// - true 成功
183  /// - false 失敗
184  /// @attention なし
185  ///
186  virtual bool DeleteCurrentJson() noexcept;
187 
188  //---------------------------------------------------------------------
189  /// カレントパス取得関数
190  ///
191  /// カレントパス取得関数です。
192  ///
193  /// @param[out] rcPath 文字列クラス参照
194  /// @return 実行結果
195  /// - true 成功
196  /// - false 失敗
197  /// @attention なし
198  ///
199  virtual bool GetCurrentPath( CString& rcPath ) noexcept;
200 
201  //---------------------------------------------------------------------
202  /// カレントパス設定関数
203  ///
204  /// カレントパス設定関数です。
205  ///
206  /// @param[in] pszPath JSONパス文字列
207  /// @return 実行結果
208  /// - true 成功
209  /// - false 失敗
210  /// @attention なし
211  ///
212  virtual bool SetCurrentPath( wchar_t const* pszPath ) noexcept;
213 
214  //---------------------------------------------------------------------
215  /// カレント設定値文字列取得関数
216  ///
217  /// カレント設定値文字列取得関数です。
218  ///
219  /// @param[out] rcValue 設定値文字列参照
220  /// @param[in] bClassName クラス名取得フラグ
221  /// @param[in] bQuotes JSON文字列二重引用符なしフラグ
222  /// @return 実行結果
223  /// - true 成功
224  /// - false 失敗
225  /// @attention なし
226  ///
227  virtual bool GetCurrentSetValue( CString& rcValue, bool bClassName = false, bool bQuotes = true ) noexcept;
228 
229  //---------------------------------------------------------------------
230  /// カレント設定値文字列設定関数
231  ///
232  /// カレント設定値文字列設定関数です。
233  ///
234  /// @param[in] pszValue 設定値文字列
235  /// @return 実行結果
236  /// - true 成功
237  /// - false 失敗
238  /// @attention なし
239  ///
240  virtual bool SetCurrentSetValue( wchar_t const* pszValue ) noexcept;
241 
242  //---------------------------------------------------------------------
243  /// JSONパス作成関数
244  ///
245  /// JSONパス作成関数です。
246  ///
247  /// @param[in] pszPath JSONパス文字列
248  /// @return 実行結果
249  /// - true 成功
250  /// - false 失敗
251  /// @attention なし
252  ///
253  virtual bool CreatePath( wchar_t const* pszPath ) noexcept;
254 
255  //=====================================================================
256  // 静的公開関数
257  public:
258  //---------------------------------------------------------------------
259  /// JSONパス取得関数
260  ///
261  /// JSONパス取得関数です。
262  ///
263  /// @param[out] rcPath JSONパス文字列参照
264  /// @param[in] pcJson JSONクラスポインタ
265  /// @return 実行結果
266  /// - true 成功
267  /// - false 失敗
268  /// @attention なし
269  ///
270  static bool GetJsonPath( CString& rcPath, CJson* pcJson ) noexcept;
271 
272  //---------------------------------------------------------------------
273  /// JSONパス検索関数
274  ///
275  /// JSONパス検索関数です。
276  ///
277  /// @param[in] pszPath JSONパス文字列
278  /// @param[in] pcJson JSONクラスポインタ
279  /// @return JSOBクラスポインタ
280  /// @attention なし
281  ///
282  static CJson* FindJsonPath( wchar_t const* pszPath, CJson* pcJson ) noexcept;
283 
284  //---------------------------------------------------------------------
285  /// JSON設定値文字列取得関数
286  ///
287  /// JSON設定値文字列取得関数です。
288  ///
289  /// @param[out] rcValue JSON設定値文字列参照
290  /// @param[in] pcJson JSONクラスポインタ
291  /// @param[in] bClassName JSONクラス名取得フラグ
292  /// @param[in] bQuotes JSON文字列二重引用符なしフラグ
293  /// @return 実行結果
294  /// - true 成功
295  /// - false 失敗
296  /// @attention なし
297  ///
298  static bool GetJsonSetValue( CString& rcValue, CJson* pcJson, bool bClassName = false, bool bQuotes = true ) noexcept;
299 
300  //---------------------------------------------------------------------
301  /// JSON設定値設定関数
302  ///
303  /// JSON設定値設定関数です。
304  ///
305  /// @param[in] pszValue JSON設定値文字列
306  /// @param[in,out] rpcJson JSONクラスポインタ参照
307  /// @return 実行結果
308  /// - true 成功
309  /// - false 失敗
310  /// @attention なし
311  ///
312  static bool SetJsonSetValue( wchar_t const* pszValue, CJson*& rpcJson ) noexcept;
313 
314  //---------------------------------------------------------------------
315  /// JSON設定値ストリーム設定関数
316  ///
317  /// JSON設定値ストリーム設定関数です。
318  ///
319  /// @param[in] rcStream JSON設定値ストリーム参照
320  /// @param[in,out] rpcJson JSONクラスポインタ参照
321  /// @return 実行結果
322  /// - true 成功
323  /// - false 失敗
324  /// @attention なし
325  ///
326  static bool SetJsonSetValueByStream( CStream& rcStream, CJson*& rpcJson ) noexcept;
327 
328  //---------------------------------------------------------------------
329  /// JSONクラス削除関数
330  ///
331  /// JSONクラス削除関数です。
332  ///
333  /// @param[in,out] rpcJson JSONクラスポインタ参照
334  /// @return 実行結果
335  /// - true 成功
336  /// - false 失敗
337  /// @attention なし
338  ///
339  static bool DeleteJson( CJson*& rpcJson ) noexcept;
340 
341  //---------------------------------------------------------------------
342  /// JSONパス作成関数
343  ///
344  /// JSONパス作成関数です。
345  ///
346  /// @param[in] pszPath JSONパス文字列
347  /// @param[in,out] rpcJson JSONクラスポインタ参照
348  /// @return 実行結果
349  /// - true 成功
350  /// - false 失敗
351  /// @attention なし
352  ///
353  static bool CreateJsonPath( wchar_t const* pszPath, CJson*& rpcJson ) noexcept;
354 
355  //---------------------------------------------------------------------
356  /// JSONパスリスト取得関数
357  ///
358  /// JSONパスリスト取得関数です。
359  ///
360  /// @param[out] rcPathList 文字列クラス参照
361  /// @param[in] pcJson JSONクラスポインタ
362  /// @return 実行結果
363  /// - true 成功
364  /// - false 失敗
365  /// @attention なし
366  ///
367  static bool GetJsonPathList( CString& rcPathList, CJson* pcJson ) noexcept;
368 
369  //=====================================================================
370  // 限定公開型定義
371  protected:
372  //---------------------------------------------------------------------
373  /// JSONパストークン種別列挙体
374  ///
375  /// JSONパストークン種別列挙体です。
376  ///
377  /// @attention なし
378  ///
379  enum class EJsonPathToken {
380  Invalid, ///< 無効値
381  Separator, ///< セパレータ
382  Dot, ///< ドット
383  DotDot, ///< 二重ドット
384  Name, ///< 名前
385  Index, ///< インデックス
386  Equal, ///< 等号
387  Size ///< 列挙体サイズ
388  };
389 
390  //=====================================================================
391  // 静的限定公開関数
392  protected:
393  //---------------------------------------------------------------------
394  /// JSONパストークン入力関数
395  ///
396  /// JSONパストークン入力関数です。
397  ///
398  /// @param[in] rcStream 入力ストリーム参照
399  /// @param[out] rcToken 文字列クラス参照
400  /// @param[in] bEqual 等号許可フラグ
401  /// @return JSONパストークン種別
402  /// @attention なし
403  ///
404  static EJsonPathToken InputPathToken( CStream& rcStream, CString& rcString, bool bEqual = false ) noexcept;
405 
406  //---------------------------------------------------------------------
407  /// JSON文字列二重引用符削除関数
408  ///
409  /// JSON文字列二重引用符削除関数です。
410  ///
411  /// @param[out] rcString 文字列参照
412  /// @return 実行結果
413  /// - true 成功
414  /// - false 失敗
415  /// @attention なし
416  ///
417  static bool DeleteQuotes( CString& rcString ) noexcept;
418 
419  //=====================================================================
420  // 限定公開変数
421  protected:
422  CJson* m_pcJsonRoot; ///< ルートJSONクラスポインタ
423  CJson* m_pcJsonCurrent; ///< カレントJSONクラスポインタ
424 
425  //=====================================================================
426  // 削除関数
427  private:
428  CJsonDocument( CJsonDocument const& ) = delete;
429  CJsonDocument& operator=( CJsonDocument const& ) = delete;
430  };
431 }
432 
433 #pragma managed( pop )
JSONドキュメントクラス
Definition: CJsonDocument.h:32
virtual CJson * GetRootJson() noexcept
ルートJSONクラス取得関数
Definition: CJsonDocument.h:86
JSONライブラリ名前空間
Definition: CJson.h:24
ストリームクラス
Definition: CStream.h:31
JSONクラス
Definition: CJson.h:44
ストリーム出力クラス
Definition: CStreamOut.h:30
文字列クラス
Definition: CString.h:31
ストリームクラスヘッダファイル
#define LIB_JSON_API
ダイナミックライブラリインポート宣言
Definition: LibJsonDef.h:29
JSONクラスヘッダファイル
virtual CJson * GetCurrentJson() noexcept
カレントJSONクラス取得関数
EJsonPathToken
JSONパストークン種別列挙体
CJson * m_pcJsonRoot
ルートJSONクラスポインタ
CJson * m_pcJsonCurrent
カレントJSONクラスポインタ
文字列クラスヘッダファイル
virtual bool IsEmpty() noexcept
空状態取得関数
Definition: CJsonDocument.h:72