Solution46
LibJson::CJsonDocument クラス

JSONドキュメントクラス [詳解]

#include "CJsonDocument.h"

LibJson::CJsonDocument の継承関係図
Inheritance graph
LibJson::CJsonDocument 連携図
Collaboration graph

公開メンバ関数

 CJsonDocument (CJson *pcJson=nullptr) noexcept
 コンストラクタ [詳解]
 
virtual ~CJsonDocument () noexcept
 デストラクタ [詳解]
 
virtual bool IsEmpty () noexcept
 空状態取得関数 [詳解]
 
virtual CJson * GetRootJson () noexcept
 ルートJSONクラス取得関数 [詳解]
 
virtual bool SetRootJson (CJson *pcJson) noexcept
 ルートJSONクラス設定関数 [詳解]
 
virtual CJson * GetCurrentJson () noexcept
 カレントJSONクラス取得関数 [詳解]
 
virtual bool SetCurrentJson (CJson *pcJson) noexcept
 カレントJSONクラス設定関数 [詳解]
 
virtual void ClearDocument () noexcept
 クリア関数 [詳解]
 
virtual bool CompactDocument () noexcept
 コンパクト化関数 [詳解]
 
virtual bool InputDocument (CStream &rcStream) noexcept
 JSONドキュメント入力関数 [詳解]
 
virtual bool OutputDocument (CStreamOut &rcStreamOut) noexcept
 JSONドキュメント出力関数 [詳解]
 
virtual bool DeleteCurrentJson () noexcept
 カレントJSONクラス削除関数 [詳解]
 
virtual bool GetCurrentPath (CString &rcPath) noexcept
 カレントパス取得関数 [詳解]
 
virtual bool SetCurrentPath (wchar_t const *pszPath) noexcept
 カレントパス設定関数 [詳解]
 
virtual bool GetCurrentSetValue (CString &rcValue, bool bClassName=false, bool bQuotes=true) noexcept
 カレント設定値文字列取得関数 [詳解]
 
virtual bool SetCurrentSetValue (wchar_t const *pszValue) noexcept
 カレント設定値文字列設定関数 [詳解]
 
virtual bool CreatePath (wchar_t const *pszPath) noexcept
 JSONパス作成関数 [詳解]
 

静的公開メンバ関数

static bool GetJsonPath (CString &rcPath, CJson *pcJson) noexcept
 JSONパス取得関数 [詳解]
 
static CJson * FindJsonPath (wchar_t const *pszPath, CJson *pcJson) noexcept
 JSONパス検索関数 [詳解]
 
static bool GetJsonSetValue (CString &rcValue, CJson *pcJson, bool bClassName=false, bool bQuotes=true) noexcept
 JSON設定値文字列取得関数 [詳解]
 
static bool SetJsonSetValue (wchar_t const *pszValue, CJson *&rpcJson) noexcept
 JSON設定値設定関数 [詳解]
 
static bool SetJsonSetValueByStream (CStream &rcStream, CJson *&rpcJson) noexcept
 JSON設定値ストリーム設定関数 [詳解]
 
static bool DeleteJson (CJson *&rpcJson) noexcept
 JSONクラス削除関数 [詳解]
 
static bool CreateJsonPath (wchar_t const *pszPath, CJson *&rpcJson) noexcept
 JSONパス作成関数 [詳解]
 
static bool GetJsonPathList (CString &rcPathList, CJson *pcJson) noexcept
 JSONパスリスト取得関数 [詳解]
 

限定公開型

enum  EJsonPathToken {
  EJsonPathToken::Invalid, EJsonPathToken::Separator, EJsonPathToken::Dot, EJsonPathToken::DotDot,
  EJsonPathToken::Name, EJsonPathToken::Index, EJsonPathToken::Equal, EJsonPathToken::Size
}
 JSONパストークン種別列挙体 [詳解]
 

静的限定公開メンバ関数

static EJsonPathToken InputPathToken (CStream &rcStream, CString &rcString, bool bEqual=false) noexcept
 JSONパストークン入力関数 [詳解]
 
static bool DeleteQuotes (CString &rcString) noexcept
 JSON文字列二重引用符削除関数 [詳解]
 

限定公開変数類

CJson * m_pcJsonRoot
 ルートJSONクラスポインタ [詳解]
 
CJson * m_pcJsonCurrent
 カレントJSONクラスポインタ [詳解]
 

非公開メンバ関数

 CJsonDocument (CJsonDocument const &)=delete
 
CJsonDocument & operator= (CJsonDocument const &)=delete
 

詳解

JSONドキュメントクラス

JSONドキュメントクラスです。

注意
なし

CJsonDocument.h の 32 行目に定義があります。

列挙型メンバ詳解

JSONパストークン種別列挙体

JSONパストークン種別列挙体です。

注意
なし
列挙値
Invalid 

無効値

Separator 

セパレータ

Dot 

ドット

DotDot 

二重ドット

Name 

名前

Index 

インデックス

Equal 

等号

Size 

列挙体サイズ

CJsonDocument.h の 379 行目に定義があります。

379  {
380  Invalid, ///< 無効値
381  Separator, ///< セパレータ
382  Dot, ///< ドット
383  DotDot, ///< 二重ドット
384  Name, ///< 名前
385  Index, ///< インデックス
386  Equal, ///< 等号
387  Size ///< 列挙体サイズ
388  };

構築子と解体子

LibJson::CJsonDocument::CJsonDocument ( CJson *  pcJson = nullptr)
explicitnoexcept

コンストラクタ

コンストラクタです。

引数
[in]pcJsonJSONクラスポインタ
戻り値
なし
注意
なし

CJsonDocument.cpp の 43 行目に定義があります。

45  : m_pcJsonRoot( pcJson )
47  {}
CJson * m_pcJsonRoot
ルートJSONクラスポインタ
CJson * m_pcJsonCurrent
カレントJSONクラスポインタ
LibJson::CJsonDocument::~CJsonDocument ( )
virtualnoexcept

デストラクタ

デストラクタです。

引数
なし
戻り値
なし
注意
なし

CJsonDocument.cpp の 51 行目に定義があります。

参照先 ClearDocument().

51  {
52  // クリアする
53  ClearDocument();
54  }
virtual void ClearDocument() noexcept
クリア関数

呼び出し関係図:

LibJson::CJsonDocument::CJsonDocument ( CJsonDocument const &  )
privatedelete

関数詳解

virtual bool LibJson::CJsonDocument::IsEmpty ( )
inlinevirtualnoexcept

空状態取得関数

空状態取得関数です。

引数
なし
戻り値
実行結果
  • true 空である
  • false 空でない
注意
なし

CJsonDocument.h の 72 行目に定義があります。

72 { return ( nullptr == m_pcJsonRoot ); }
CJson * m_pcJsonRoot
ルートJSONクラスポインタ
virtual CJson* LibJson::CJsonDocument::GetRootJson ( )
inlinevirtualnoexcept

ルートJSONクラス取得関数

ルートJSONクラス取得関数です。

引数
なし
戻り値
JSONクラスポインタ
注意
なし

CJsonDocument.h の 86 行目に定義があります。

86 { return m_pcJsonRoot; }
CJson * m_pcJsonRoot
ルートJSONクラスポインタ
bool LibJson::CJsonDocument::SetRootJson ( CJson *  pcJson)
virtualnoexcept

ルートJSONクラス設定関数

ルートJSONクラス設定関数です。

引数
[in]pcJsonJSONクラスポインタ
戻り値
実行結果
  • true 成功
  • false 失敗
注意
なし

CJsonDocument.cpp の 60 行目に定義があります。

参照先 ClearDocument(), m_pcJsonCurrent, m_pcJsonRoot.

参照元 SetCurrentJson().

60  {
61  // 処理ブロック
62  bool result = false;
63  do {
64  // JSONクラスポインタを調べる
65  if ( nullptr == pcJson ) {
66  // 失敗!
67  break;
68  }
69  // ルートJSONクラスを調べる
70  else if ( pcJson != pcJson->GetJsonRoot() ) {
71  // 失敗!
72  break;
73  }
74 
75  // クリアする
76  ClearDocument();
77 
78  // JSONクラスポインタを設定する
79  m_pcJsonRoot = m_pcJsonCurrent = pcJson;
80 
81  // 成功!
82  result = true;
83  } while ( false );
84 
85  // 実行結果を返す
86  return result;
87  }
virtual void ClearDocument() noexcept
クリア関数
CJson * m_pcJsonRoot
ルートJSONクラスポインタ
CJson * m_pcJsonCurrent
カレントJSONクラスポインタ

呼び出し関係図:

被呼び出し関係図:

virtual CJson* LibJson::CJsonDocument::GetCurrentJson ( )
inlinevirtualnoexcept

カレントJSONクラス取得関数

カレントJSONクラス取得関数です。

引数
なし
戻り値
JSONクラスポインタ
注意
なし

CJsonDocument.h の 110 行目に定義があります。

110 { return m_pcJsonCurrent; }
CJson * m_pcJsonCurrent
カレントJSONクラスポインタ
bool LibJson::CJsonDocument::SetCurrentJson ( CJson *  pcJson)
virtualnoexcept

カレントJSONクラス設定関数

カレントJSONクラス設定関数です。

引数
[in]pcJsonJSONクラスポインタ
戻り値
実行結果
  • true 成功
  • false 失敗
注意
なし

CJsonDocument.cpp の 91 行目に定義があります。

参照先 LibJson::CJson::GetJsonRoot(), m_pcJsonCurrent, m_pcJsonRoot, SetRootJson().

91  {
92  // 処理ブロック
93  bool result = false;
94  do {
95  // JSONクラスポインタを調べる
96  if ( nullptr == pcJson ) {
97  // 失敗!
98  break;
99  }
100 
101  // ルートJSONクラスを取得する
102  CJson* pcJsonRoot = pcJson->GetJsonRoot();
103 
104  // ルートJSONクラスポインタを調べる
105  if ( nullptr == m_pcJsonRoot ) {
106  // ルートJSONクラスを設定する
107  if ( !SetRootJson( pcJsonRoot ) ) {
108  // 失敗!
109  break;
110  }
111  }
112  // ルートJSONクラスを調べる
113  else if ( m_pcJsonRoot != pcJsonRoot ) {
114  // 失敗!
115  break;
116  }
117 
118  // カレントJSONクラスポインタを設定する
119  m_pcJsonCurrent = pcJson;
120 
121  // 成功!
122  result = true;
123  } while ( false );
124 
125  // 実行結果を返す
126  return result;
127  }
virtual bool SetRootJson(CJson *pcJson) noexcept
ルートJSONクラス設定関数
CJson * m_pcJsonRoot
ルートJSONクラスポインタ
CJson * m_pcJsonCurrent
カレントJSONクラスポインタ

呼び出し関係図:

void LibJson::CJsonDocument::ClearDocument ( )
virtualnoexcept

クリア関数

クリア関数です。

引数
なし
戻り値
なし
注意
なし

CJsonDocument.cpp の 131 行目に定義があります。

参照先 m_pcJsonCurrent, m_pcJsonRoot.

参照元 CreatePath(), DeleteCurrentJson(), InputDocument(), SetCurrentSetValue(), SetRootJson(), ~CJsonDocument().

131  {
132  // ルートJSONクラスを削除する
133  delete m_pcJsonRoot;
134  m_pcJsonRoot = nullptr;
135  m_pcJsonCurrent = nullptr;
136  }
CJson * m_pcJsonRoot
ルートJSONクラスポインタ
CJson * m_pcJsonCurrent
カレントJSONクラスポインタ

被呼び出し関係図:

bool LibJson::CJsonDocument::CompactDocument ( )
virtualnoexcept

コンパクト化関数

コンパクト化関数です。

引数
なし
戻り値
実行結果
  • true 成功
  • false 失敗
注意
なし

CJsonDocument.cpp の 140 行目に定義があります。

参照先 LibJson::CJson::CompactJson(), m_pcJsonRoot.

140  {
141  // 処理ブロック
142  bool result = false;
143  do {
144  // ルートJSONクラスポインタを調べる
145  if ( nullptr != m_pcJsonRoot ) {
146  // ルートJSONクラスをコンパクト化する
147  if ( !m_pcJsonRoot->CompactJson() ) {
148  // 失敗!
149  break;
150  }
151  }
152 
153  // 成功!
154  result = true;
155  } while ( false );
156 
157  // 実行結果を返す
158  return result;
159  }
virtual bool CompactJson() noexcept
JSONクラスコンパクト化関数
Definition: CJson.cpp:93
CJson * m_pcJsonRoot
ルートJSONクラスポインタ

呼び出し関係図:

bool LibJson::CJsonDocument::InputDocument ( CStream &  rcStream)
virtualnoexcept

JSONドキュメント入力関数

JSONドキュメント入力関数です。

引数
[in]rcStream入力ストリーム参照
戻り値
実行結果
  • true 成功
  • false 失敗
注意
なし

CJsonDocument.cpp の 163 行目に定義があります。

参照先 ClearDocument(), LibJson::CJsonValue::CreateInputJson(), LibJson::CJsonPair::CreateInputJson(), m_pcJsonCurrent, m_pcJsonRoot.

参照元 LibJson::CJsonConfig::Load().

163  {
164  // 処理ブロック
165  bool result = false;
166  do {
167  // ストリームポインタを取得する
168  int nPoint = rcStream.GetStreamPoint();
169 
170  // 処理ブロック
171  do {
172  // クリアする
173  ClearDocument();
174 
175  // JSONペアを作成する
176  m_pcJsonRoot = CJsonPair::CreateInputJson( rcStream, nullptr );
177  if ( nullptr == m_pcJsonRoot ) {
178  // JSONバリューを作成する
179  m_pcJsonRoot = CJsonValue::CreateInputJson( rcStream, nullptr );
180  if ( nullptr == m_pcJsonRoot ) {
181  // 失敗!
182  break;
183  }
184  }
185 
186  // カレントJSONクラスを設定する
188 
189  // 成功!
190  result = true;
191  }while ( false );
192 
193  // 実行結果を調べる
194  if ( !result ) {
195  // ストリームポインタを復元する
196  rcStream.SetStreamPoint( nPoint );
197  }
198  } while ( false );
199 
200  // 実行結果を返す
201  return result;
202  }
virtual void ClearDocument() noexcept
クリア関数
static CJsonValue * CreateInputJson(CStream &rcStream, CJson *pcParent) noexcept
JSONバリュー入力作成関数
Definition: CJsonValue.cpp:46
CJson * m_pcJsonRoot
ルートJSONクラスポインタ
CJson * m_pcJsonCurrent
カレントJSONクラスポインタ
static CJsonPair * CreateInputJson(CStream &rcStream, CJson *pcParent) noexcept
JSONペア入力作成関数
Definition: CJsonPair.cpp:199

呼び出し関係図:

被呼び出し関係図:

bool LibJson::CJsonDocument::OutputDocument ( CStreamOut &  rcStreamOut)
virtualnoexcept

JSONドキュメント出力関数

JSONドキュメント出力関数です。

引数
[in]rcStreamOut出力ストリーム参照
戻り値
実行結果
  • true 成功
  • false 失敗
注意
なし

CJsonDocument.cpp の 206 行目に定義があります。

参照先 m_pcJsonRoot, LibJson::CJson::OutputJson().

参照元 LibJson::CJsonConfig::Save().

206  {
207  // 処理ブロック
208  bool result = false;
209  do {
210  // ルートJSONクラスポインタを調べる
211  if ( nullptr != m_pcJsonRoot ) {
212  // ルートJSONクラスを出力する
213  if ( !m_pcJsonRoot->OutputJson( rcStreamOut ) ) {
214  // 失敗!
215  break;
216  }
217  // 改行を出力する
218  else if ( !rcStreamOut.OutputNewLine() ) {
219  // 失敗!
220  break;
221  }
222  }
223 
224  // 成功!
225  result = true;
226  } while ( false );
227 
228  // 実行結果を返す
229  return result;
230  }
virtual bool OutputJson(CStreamOut &rcStreamOut) noexcept
JSONクラス出力関数
Definition: CJson.h:232
CJson * m_pcJsonRoot
ルートJSONクラスポインタ

呼び出し関係図:

被呼び出し関係図:

bool LibJson::CJsonDocument::DeleteCurrentJson ( )
virtualnoexcept

カレントJSONクラス削除関数

カレントJSONクラス削除関数です。

引数
なし
戻り値
実行結果
  • true 成功
  • false 失敗
注意
なし

CJsonDocument.cpp の 234 行目に定義があります。

参照先 ClearDocument(), DeleteJson(), m_pcJsonCurrent, m_pcJsonRoot.

参照元 LibJson::CJsonConfigAuto::~CJsonConfigAuto().

234  {
235  // 処理ブロック
236  bool result = false;
237  do {
238  // カレントJSONクラスポインタを調べる
239  if ( m_pcJsonRoot == m_pcJsonCurrent ) {
240  // クリアする
241  ClearDocument();
242  }
243  // JSONクラスを削除する
244  else if ( !DeleteJson( m_pcJsonCurrent ) ) {
245  // 失敗!
246  break;
247  }
248 
249  // 成功!
250  result = true;
251  } while ( false );
252 
253  // 実行結果を返す
254  return result;
255  }
virtual void ClearDocument() noexcept
クリア関数
CJson * m_pcJsonRoot
ルートJSONクラスポインタ
CJson * m_pcJsonCurrent
カレントJSONクラスポインタ
static bool DeleteJson(CJson *&rpcJson) noexcept
JSONクラス削除関数

呼び出し関係図:

被呼び出し関係図:

bool LibJson::CJsonDocument::GetCurrentPath ( CString &  rcPath)
virtualnoexcept

カレントパス取得関数

カレントパス取得関数です。

引数
[out]rcPath文字列クラス参照
戻り値
実行結果
  • true 成功
  • false 失敗
注意
なし

CJsonDocument.cpp の 259 行目に定義があります。

参照先 GetJsonPath(), m_pcJsonCurrent.

参照元 CreatePath().

259  {
260  // 処理ブロック
261  bool result = false;
262  do {
263  // カレントJSONクラスのJSONパスを取得する
264  result = GetJsonPath( rcPath, m_pcJsonCurrent );
265  } while ( false );
266 
267  // 実行結果を返す
268  return result;
269  }
static bool GetJsonPath(CString &rcPath, CJson *pcJson) noexcept
JSONパス取得関数
CJson * m_pcJsonCurrent
カレントJSONクラスポインタ

呼び出し関係図:

被呼び出し関係図:

bool LibJson::CJsonDocument::SetCurrentPath ( wchar_t const *  pszPath)
virtualnoexcept

カレントパス設定関数

カレントパス設定関数です。

引数
[in]pszPathJSONパス文字列
戻り値
実行結果
  • true 成功
  • false 失敗
注意
なし

CJsonDocument.cpp の 273 行目に定義があります。

参照先 FindJsonPath(), m_pcJsonCurrent.

参照元 LibJson::CJsonConfigAuto::~CJsonConfigAuto().

273  {
274  // 処理ブロック
275  bool result = false;
276  do {
277  // カレントJSONクラスのJSONパスを検索する
278  CJson* pcJson = FindJsonPath( pszPath, m_pcJsonCurrent );
279  if ( nullptr == pcJson ) {
280  // 失敗!
281  break;
282  }
283 
284  // カレントJSONクラスポインタを設定する
285  m_pcJsonCurrent = pcJson;
286 
287  // 成功!
288  result = true;
289  } while ( false );
290 
291  // 実行結果を返す
292  return result;
293  }
static CJson * FindJsonPath(wchar_t const *pszPath, CJson *pcJson) noexcept
JSONパス検索関数
CJson * m_pcJsonCurrent
カレントJSONクラスポインタ

呼び出し関係図:

被呼び出し関係図:

bool LibJson::CJsonDocument::GetCurrentSetValue ( CString &  rcValue,
bool  bClassName = false,
bool  bQuotes = true 
)
virtualnoexcept

カレント設定値文字列取得関数

カレント設定値文字列取得関数です。

引数
[out]rcValue設定値文字列参照
[in]bClassNameクラス名取得フラグ
[in]bQuotesJSON文字列二重引用符なしフラグ
戻り値
実行結果
  • true 成功
  • false 失敗
注意
なし

CJsonDocument.cpp の 297 行目に定義があります。

参照先 GetJsonSetValue(), m_pcJsonCurrent.

参照元 LibJson::CJsonConfigAuto::~CJsonConfigAuto().

297  {
298  // 処理ブロック
299  bool result = false;
300  do {
301  // カレントJSONクラスのJSON設定値文字列を取得する
302  result = GetJsonSetValue( rcValue, m_pcJsonCurrent, bClassName, bQuotes );
303  } while ( false );
304 
305  // 実行結果を返す
306  return result;
307  }
static bool GetJsonSetValue(CString &rcValue, CJson *pcJson, bool bClassName=false, bool bQuotes=true) noexcept
JSON設定値文字列取得関数
CJson * m_pcJsonCurrent
カレントJSONクラスポインタ

呼び出し関係図:

被呼び出し関係図:

bool LibJson::CJsonDocument::SetCurrentSetValue ( wchar_t const *  pszValue)
virtualnoexcept

カレント設定値文字列設定関数

カレント設定値文字列設定関数です。

引数
[in]pszValue設定値文字列
戻り値
実行結果
  • true 成功
  • false 失敗
注意
なし

CJsonDocument.cpp の 311 行目に定義があります。

参照先 ClearDocument(), m_pcJsonCurrent, m_pcJsonRoot, SetJsonSetValue().

311  {
312  // 処理ブロック
313  bool result = false;
314  do {
315  // カレントJSONクラスのJSON設定値文字列を設定する
316  CJson* pcJson = m_pcJsonCurrent;
317  if ( !SetJsonSetValue( pszValue, pcJson ) ) {
318  // 失敗!
319  break;
320  }
321  // カレントJSONクラスポインタを調べる
322  else if ( m_pcJsonRoot == m_pcJsonCurrent ) {
323  // クリアする
324  ClearDocument();
325 
326  // ルートJSONクラスポインタを設定する
327  m_pcJsonRoot = pcJson;
328  }
329 
330  // カレントJSONクラスポインタを設定する
331  m_pcJsonCurrent = pcJson;
332 
333  // 成功!
334  result = true;
335  } while ( false );
336 
337  // 実行結果を返す
338  return result;
339  }
static bool SetJsonSetValue(wchar_t const *pszValue, CJson *&rpcJson) noexcept
JSON設定値設定関数
virtual void ClearDocument() noexcept
クリア関数
CJson * m_pcJsonRoot
ルートJSONクラスポインタ
CJson * m_pcJsonCurrent
カレントJSONクラスポインタ

呼び出し関係図:

bool LibJson::CJsonDocument::CreatePath ( wchar_t const *  pszPath)
virtualnoexcept

JSONパス作成関数

JSONパス作成関数です。

引数
[in]pszPathJSONパス文字列
戻り値
実行結果
  • true 成功
  • false 失敗
注意
なし

CJsonDocument.cpp の 343 行目に定義があります。

参照先 ClearDocument(), CreateJsonPath(), FindJsonPath(), GetCurrentPath(), LibJson::CJson::GetJsonRoot(), m_pcJsonCurrent, m_pcJsonRoot.

参照元 LibJson::CJsonConfig::Set().

343  {
344  // 処理ブロック
345  bool result = false;
346  do {
347  // カレントJSONクラスポインタを調べる
348  CString cPath( L"/" );
349  if ( nullptr != m_pcJsonCurrent ) {
350  // カレントJSONパスを取得する
351  GetCurrentPath( cPath );
352  }
353 
354  // カレントJSONクラス相対でJSONパスを作成する
355  CJson* pcJson = m_pcJsonCurrent;
356  if ( !CreateJsonPath( pszPath, pcJson ) || ( nullptr == pcJson ) ) {
357  // 失敗!
358  break;
359  }
360 
361  // ルートJSONクラスポインタを調べる
362  CJson* pcRoot = pcJson->GetJsonRoot();
363  if ( ( nullptr == m_pcJsonRoot ) || ( pcRoot != m_pcJsonRoot->GetJsonRoot() ) ) {
364  // クリアする
365  ClearDocument();
366  }
367 
368  // ルートJSONクラスポインタを設定する
369  m_pcJsonRoot = pcRoot;
370 
371  // カレントJSONパスを検索する
373  if ( nullptr == m_pcJsonCurrent ) {
374  // カレントJSONクラスポインタを設定する
376  }
377 
378  // 成功!
379  result = true;
380  } while ( false );
381 
382  // 実行結果を返す
383  return result;
384  }
virtual bool GetCurrentPath(CString &rcPath) noexcept
カレントパス取得関数
virtual CJson * GetJsonRoot() noexcept
ルートJSONクラス取得関数
Definition: CJson.cpp:61
static CJson * FindJsonPath(wchar_t const *pszPath, CJson *pcJson) noexcept
JSONパス検索関数
virtual void ClearDocument() noexcept
クリア関数
static bool CreateJsonPath(wchar_t const *pszPath, CJson *&rpcJson) noexcept
JSONパス作成関数
CJson * m_pcJsonRoot
ルートJSONクラスポインタ
CJson * m_pcJsonCurrent
カレントJSONクラスポインタ

呼び出し関係図:

被呼び出し関係図:

bool LibJson::CJsonDocument::GetJsonPath ( CString &  rcPath,
CJson *  pcJson 
)
staticnoexcept

JSONパス取得関数

JSONパス取得関数です。

引数
[out]rcPathJSONパス文字列参照
[in]pcJsonJSONクラスポインタ
戻り値
実行結果
  • true 成功
  • false 失敗
注意
なし

CJsonDocument.cpp の 390 行目に定義があります。

参照先 LibCommon::CArray< Type >::GetCount(), LibJson::CJson::GetJsonArray(), LibJson::CJson::GetJsonParent(), LibJson::CJson::GetJsonString(), LibJson::CJson::IsJsonArray(), LibJson::CJson::IsJsonPair().

参照元 GetCurrentPath(), GetJsonPathList().

390  {
391  // 処理ブロック
392  bool result = false;
393  do {
394  // JSONクラスポインタを調べる
395  if ( nullptr == pcJson ) {
396  // 失敗!
397  break;
398  }
399 
400  // 巡回する
401  rcPath = L"";
402  CJson* pcParent = nullptr;
403  for ( ; nullptr != pcJson; pcJson = pcParent ) {
404  // 親JSONクラスを取得する
405  pcParent = pcJson->GetJsonParent();
406  if ( nullptr != pcParent ) {
407  // 親JSONクラス種別を調べる
408  if ( pcParent->IsJsonPair() ) {
409  // JSON文字列を取得する
410  CJsonString* pcJsonString = pcParent->GetJsonString();
411  if ( nullptr == pcJsonString ) {
412  // 失敗!
413  break;
414  }
415 
416  // 文字列を取得する
417  wchar_t const* pszString = *pcJsonString;
418  if ( nullptr == pszString ) {
419  // 空文字列を設定する
420  pszString = L"";
421  }
422 
423  // 二重引用符で括るか判断する
424  size_t len = ::wcslen( pszString );
425  if ( ( 0 == len ) || ( nullptr != ::wcschr( pszString, L' ' ) ) ) {
426  // 名前を二重引用符で括って挿入する
427  if ( !rcPath.Insert( 0, CString().Format( L"\"%s\"", pszString ) ) ) {
428  // 失敗!
429  break;
430  }
431  }
432  // 名前を挿入する
433  else if ( !rcPath.Insert( 0, pszString ) ) {
434  // 失敗!
435  break;
436  }
437 
438  // セパレータを挿入する
439  rcPath.Insert( 0, L'/' );
440  }
441  // 親JSONクラス種別を調べる
442  else if ( pcParent->IsJsonArray() ) {
443  // JSON配列を取得する
444  CJsonArray* pcJsonArray = pcParent->GetJsonArray();
445  if ( nullptr == pcJsonArray ) {
446  // 失敗!
447  break;
448  }
449 
450  // 巡回する
451  int nCount = pcJsonArray->GetCount();
452  int nIndex = 0;
453  for ( ;; ++nIndex ) {
454  // 調べる
455  if ( nCount <= nIndex ) {
456  // 失敗!
457  nIndex = -1;
458  break;
459  }
460  // JSONクラスポインタを調べる
461  else if ( pcJson == ( *pcJsonArray )[ nIndex ] ) {
462  // 終了!
463  break;
464  }
465  }
466 
467  // インデックスを調べる
468  if ( 0 > nIndex ) {
469  // 失敗!
470  break;
471  }
472  // 配列添え字を挿入する
473  else if ( !rcPath.Insert( 0, CString().Format( L"[%d]", nIndex ) ) ) {
474  // 失敗!
475  break;
476  }
477  }
478  // 親JSONクラス種別を調べる
479  else if ( pcParent->IsJsonPair() ) {
480  // 子JSONクラス種別を調べる
481  if ( pcJson->IsJsonObject() ) {
482  // セパレータを挿入する
483  if ( !rcPath.Insert( 0, L'/' ) ) {
484  // 失敗!
485  break;
486  }
487  }
488  }
489  }
490 
491  // 親JSONクラスポインタを調べる
492  if ( nullptr == pcParent ) {
493  // 文字数を調べる
494  wchar_t ch = L'\0';
495  if ( 0 < rcPath.GetCount() ) {
496  // 先頭の文字を取得する
497  ch = rcPath[ 0 ];
498  }
499 
500  // 先頭の文字を調べる
501  if ( L'/' != ch ) {
502  // セパレータを挿入する
503  rcPath.Insert( 0, L'/' );
504  }
505 
506  // 成功!
507  result = true;
508  break;
509  }
510  }
511  } while ( false );
512 
513  // 実行結果を返す
514  return result;
515  }

呼び出し関係図:

被呼び出し関係図:

CJson * LibJson::CJsonDocument::FindJsonPath ( wchar_t const *  pszPath,
CJson *  pcJson 
)
staticnoexcept

JSONパス検索関数

JSONパス検索関数です。

引数
[in]pszPathJSONパス文字列
[in]pcJsonJSONクラスポインタ
戻り値
JSOBクラスポインタ
注意
なし

CJsonDocument.cpp の 519 行目に定義があります。

参照先 Dot, DotDot, LibJson::CJsonArray::GetJsonArray(), LibJson::CJsonContainer::GetJsonElement(), LibJson::CJsonObject::GetJsonObject(), LibJson::CJsonPair::GetJsonPair(), LibJson::CJsonObject::GetJsonPair(), LibJson::CJsonPair::GetJsonValue(), Index, InputPathToken(), Invalid, LibCommon::CStream::IsStreamEnd(), Name, Separator.

参照元 CreatePath(), LibJson::CJsonConfig::Delete(), LibJson::CJsonConfig::Get(), SetCurrentPath().

519  {
520  // 処理ブロック
521  CJson* result = nullptr;
522  do {
523  // パス文字列ポインタを調べる
524  if ( nullptr == pszPath ) {
525  // 失敗!
526  break;
527  }
528  // JSONクラスポインタを調べる
529  else if ( nullptr == pcJson ) {
530  // 失敗!
531  break;
532  }
533 
534  // 文字列ストリームを作成する
535  CStringStream cStream( pszPath );
536 
537  // 巡回する
539  for ( int nToken = 0; nullptr != pcJson; ) {
540  // ストリーム終端か調べる
541  if ( cStream.IsStreamEnd() ) {
542  // 成功!
543  result = pcJson;
544  break;
545  }
546 
547  // JSONパストークンを入力する
548  EJsonPathToken ePrev = eToken;
549  CString cToken;
550  eToken = InputPathToken( cStream, cToken );
551  ++nToken;
552 
553  // JSONパストークン種別を調べる
554  if ( EJsonPathToken::Separator == eToken ) {
555  // 直前のJSONパストークン種別を調べる
556  if ( EJsonPathToken::Separator == ePrev ) {
557  // 失敗!
558  break;
559  }
560  // トークン入力カウントを調べる
561  else if ( 1 == nToken ) {
562  // ルートJSONクラスを取得する
563  pcJson = pcJson->GetJsonRoot();
564  }
565  }
566  // 直前のJSONパストークン種別を調べる
567  else if ( ( EJsonPathToken::Dot == ePrev ) || ( EJsonPathToken::DotDot == ePrev ) ) {
568  // 失敗!
569  break;
570  }
571  // JSONパストークン種別を調べる
572  else if ( EJsonPathToken::Dot == eToken ) {
573  // 何もしない
574  }
575  // JSONパストークン種別を調べる
576  else if ( EJsonPathToken::DotDot == eToken ) {
577  // 親JSONクラスを取得する
578  pcJson = pcJson->GetJsonParent();
579  }
580  // JSONパストークン種別を調べる
581  else if ( EJsonPathToken::Name == eToken ) {
582  // JSONペアを取得する
583  CJsonPair* pcJsonPair = pcJson->GetJsonPair();
584  if ( nullptr == pcJsonPair ) {
585  // JSONオブジェクトを取得する
586  CJsonObject* pcJsonObject = pcJson->GetJsonObject();
587  if ( nullptr == pcJsonObject ) {
588  // 失敗!
589  break;
590  }
591 
592  // JSONペアを取得する
593  pcJsonPair = pcJsonObject->GetJsonPair( cToken );
594  if ( nullptr == pcJsonPair ) {
595  // 失敗!
596  break;
597  }
598  }
599 
600  // JSONバリューを取得する
601  pcJson = pcJsonPair->GetJsonValue();
602  }
603  // JSONパストークン種別を調べる
604  else if ( EJsonPathToken::Index == eToken ) {
605  // JSON配列を取得する
606  CJsonArray* pcJsonArray = pcJson->GetJsonArray();
607  if ( nullptr == pcJsonArray ) {
608  // 失敗!
609  break;
610  }
611 
612  // インデックスを取得する
613  int nIndex = static_cast< int >( ::wcstol( cToken, nullptr, 10 ) );
614 
615  // JSONエレメントを取得する
616  pcJson = pcJsonArray->GetJsonElement( nIndex );
617  }
618  else {
619  // 失敗!
620  break;
621  }
622  }
623  } while ( false );
624 
625  // 実行結果を返す
626  return result;
627  }
static EJsonPathToken InputPathToken(CStream &rcStream, CString &rcString, bool bEqual=false) noexcept
JSONパストークン入力関数
EJsonPathToken
JSONパストークン種別列挙体

呼び出し関係図:

被呼び出し関係図:

bool LibJson::CJsonDocument::GetJsonSetValue ( CString &  rcValue,
CJson *  pcJson,
bool  bClassName = false,
bool  bQuotes = true 
)
staticnoexcept

JSON設定値文字列取得関数

JSON設定値文字列取得関数です。

引数
[out]rcValueJSON設定値文字列参照
[in]pcJsonJSONクラスポインタ
[in]bClassNameJSONクラス名取得フラグ
[in]bQuotesJSON文字列二重引用符なしフラグ
戻り値
実行結果
  • true 成功
  • false 失敗
注意
なし

CJsonDocument.cpp の 631 行目に定義があります。

参照先 LibCommon::CArray< Type >::GetCount(), LibJson::CJsonContainer::GetJsonContainer(), LibJson::CJsonToken::GetJsonToken(), LibJson::CJson::JsonArray, LibJson::CJson::JsonFixed, LibJson::CJson::JsonNumber, LibJson::CJson::JsonObject, LibJson::CJson::JsonPair, LibJson::CJson::JsonString.

参照元 LibJson::CJsonConfig::Get(), GetCurrentSetValue(), GetJsonPathList().

631  {
632  // 処理ブロック
633  bool result = false;
634  do {
635  // JSONクラスポインタを調べる
636  if ( nullptr == pcJson ) {
637  // 失敗!
638  break;
639  }
640 
641  // JSONクラス種別を調べる
642  if ( pcJson->IsJsonToken() ) {
643  // JSONトークンを取得する
644  CJsonToken* pcJsonToken = pcJson->GetJsonToken();
645  if ( nullptr == pcJsonToken ) {
646  // 失敗!
647  break;
648  }
649 
650  // 文字列を取得する
651  wchar_t const* pszString = *pcJsonToken;
652  if ( nullptr == pszString ) {
653  // 空文字列を設定する
654  pszString = L"";
655  }
656 
657  // JSONクラス種別を調べる
658  if ( bQuotes && pcJson->IsJsonString() ) {
659  // 二重引用符で括ってトークン文字列を追加する
660  if ( !rcValue.Push( CString().Format( L"\"%s\"", pszString ) ) ) {
661  // 失敗!
662  break;
663  }
664  }
665  // トークン文字列を追加する
666  else if ( !rcValue.Push( pszString ) ) {
667  // 失敗!
668  break;
669  }
670  }
671  // JSONクラス種別を調べる
672  else if ( pcJson->IsJsonContainer() ) {
673  // JSONコンテナクラスを取得する
674  CJsonContainer* pcJsonContainer = pcJson->GetJsonContainer();
675  if ( nullptr == pcJsonContainer ) {
676  // 失敗!
677  break;
678  }
679  // JSONクラスエレメント数を調べる
680  else if ( 0 == pcJsonContainer->GetCount() ) {
681  // JSONクラス種別を調べる
682  if ( pcJson->IsJsonObject() ) {
683  // 空オブジェクト文字列を追加する
684  if ( !rcValue.Push( L"{}" ) ) {
685  // 失敗!
686  break;
687  }
688  }
689  else if ( pcJson->IsJsonArray() ) {
690  // 空配列文字列を追加する
691  if ( !rcValue.Push( L"[]" ) ) {
692  // 失敗!
693  break;
694  }
695  }
696  else {
697  // 失敗!
698  break;
699  }
700  }
701  // JSONクラス種別を調べる
702  else if ( pcJson->IsJsonObject() ) {
703  // オブジェクト文字列を追加する
704  if ( !rcValue.Push( L"{...}" ) ) {
705  // 失敗!
706  break;
707  }
708  }
709  else if ( pcJson->IsJsonArray() ) {
710  // 配列文字列を追加する
711  if ( !rcValue.Push( L"[...]" ) ) {
712  // 失敗!
713  break;
714  }
715  }
716  else {
717  // 失敗!
718  break;
719  }
720  }
721  // JSONクラス種別を調べる
722  else if ( pcJson->IsJsonPair() ) {
723  // JSON文字列のJSON設定値文字列を取得する
724  if ( !GetJsonSetValue( rcValue, pcJson->GetJsonString(), false ) ) {
725  // 失敗!
726  break;
727  }
728  // 区切り文字列を追加する
729  else if ( !rcValue.Push( L": " ) ) {
730  // 失敗!
731  break;
732  }
733  // JSONバリューのJSON設定値文字列を取得する
734  else if ( !GetJsonSetValue( rcValue, pcJson->GetJsonValue(), false ) ) {
735  // 失敗!
736  break;
737  }
738  }
739  else {
740  // 失敗!
741  break;
742  }
743 
744  // JSONクラス名取得フラグを調べる
745  if ( bClassName ) {
746  // JSONクラス種別を調べる
747  wchar_t const* pszString = L"";
748  switch ( pcJson->GetJsonClass() ) {
749  case CJson::EJsonClass::JsonObject: pszString = L" ( JSONオブジェクト )"; break;
750  case CJson::EJsonClass::JsonArray: pszString = L" ( JSON配列 )"; break;
751  case CJson::EJsonClass::JsonString: pszString = L" ( JSON文字列 )"; break;
752  case CJson::EJsonClass::JsonNumber: pszString = L" ( JSON数値 )"; break;
753  case CJson::EJsonClass::JsonFixed: pszString = L" ( JSON固定値 )"; break;
754  case CJson::EJsonClass::JsonPair: pszString = L" ( JSONペア )"; break;
755  }
756 
757  // JSONクラス種別文字列を追加する
758  rcValue += pszString;
759  }
760 
761  // 成功!
762  result = true;
763  } while ( false );
764 
765  // 実行結果を返す
766  return result;
767  }
static bool GetJsonSetValue(CString &rcValue, CJson *pcJson, bool bClassName=false, bool bQuotes=true) noexcept
JSON設定値文字列取得関数
JSONオブジェクトクラス

呼び出し関係図:

被呼び出し関係図:

bool LibJson::CJsonDocument::SetJsonSetValue ( wchar_t const *  pszValue,
CJson *&  rpcJson 
)
staticnoexcept

JSON設定値設定関数

JSON設定値設定関数です。

引数
[in]pszValueJSON設定値文字列
[in,out]rpcJsonJSONクラスポインタ参照
戻り値
実行結果
  • true 成功
  • false 失敗
注意
なし

CJsonDocument.cpp の 771 行目に定義があります。

参照先 SetJsonSetValueByStream().

参照元 SetCurrentSetValue().

771  {
772  // 文字列ストリームでJSON設定値を設定する
773  CStringStream cStream( pszValue );
774  return SetJsonSetValueByStream( cStream, rpcJson );
775  }
static bool SetJsonSetValueByStream(CStream &rcStream, CJson *&rpcJson) noexcept
JSON設定値ストリーム設定関数

呼び出し関係図:

被呼び出し関係図:

bool LibJson::CJsonDocument::SetJsonSetValueByStream ( CStream &  rcStream,
CJson *&  rpcJson 
)
staticnoexcept

JSON設定値ストリーム設定関数

JSON設定値ストリーム設定関数です。

引数
[in]rcStreamJSON設定値ストリーム参照
[in,out]rpcJsonJSONクラスポインタ参照
戻り値
実行結果
  • true 成功
  • false 失敗
注意
なし

CJsonDocument.cpp の 779 行目に定義があります。

参照先 LibJson::CJsonValue::CreateInputJson(), LibJson::CJsonPair::CreateInputJson(), LibCommon::CArray< Type >::Find(), LibJson::CJson::GetJsonContainer(), LibJson::CJsonContainer::GetJsonElement(), LibJson::CJson::GetJsonPair(), LibJson::CJson::GetJsonParent(), LibJson::CJson::GetJsonValue(), LibJson::CJson::IsJsonArray(), LibJson::CJson::IsJsonContainer(), LibJson::CJson::IsJsonObject(), LibJson::CJson::IsJsonPair(), LibJson::CJsonContainer::SetJsonElement(), LibJson::CJsonPair::SetJsonValue().

参照元 CreateJsonPath(), SetJsonSetValue().

779  {
780  // 処理ブロック
781  bool result = false;
782  do {
783  // JSONクラスポインタを調べる
784  CJson* pcParent = nullptr;
785  if ( nullptr != rpcJson ) {
786  // 親JSONクラスを取得する
787  pcParent = rpcJson->GetJsonParent();
788  }
789 
790  // 最初の親JSONクラスを保存する
791  CJson* pcParentFirst = pcParent;
792 
793  // 親JSONクラスポインタを調べる
794  CJson* pcJsonNew = nullptr;
795  if ( nullptr == pcParent ) {
796  // JSONペアを新規作成する
797  pcJsonNew = CJsonPair::CreateInputJson( rcStream, pcParent );
798  if ( nullptr == pcJsonNew ) {
799  // JSONバリューを新規作成する
800  pcJsonNew = CJsonValue::CreateInputJson( rcStream, pcParent );
801  if ( nullptr == pcJsonNew ) {
802  // 失敗!
803  break;
804  }
805  }
806  }
807  // 親JSONクラス種別を調べる
808  else if ( pcParent->IsJsonObject() ) {
809  // JSONペアを新規作成する
810  pcJsonNew = CJsonPair::CreateInputJson( rcStream, pcParent );
811  if ( nullptr == pcJsonNew ) {
812  // 失敗!
813  break;
814  }
815  }
816  // 親JSONクラス種別を調べる
817  else if ( pcParent->IsJsonArray() ) {
818  // JSONバリューを新規作成する
819  pcJsonNew = CJsonValue::CreateInputJson( rcStream, pcParent );
820  if ( nullptr == pcJsonNew ) {
821  // 失敗!
822  break;
823  }
824  }
825  // 親JSONクラス種別を調べる
826  else if ( pcParent->IsJsonPair() ) {
827  // JSONバリューを新規作成する
828  pcJsonNew = CJsonValue::CreateInputJson( rcStream, pcParent );
829  if ( nullptr == pcJsonNew ) {
830  // 失敗!
831  break;
832  }
833  }
834  else {
835  // 失敗!
836  break;
837  }
838 
839  // 処理ブロック
840  do {
841  // 親JSONクラスポインタを調べる
842  if ( nullptr == pcParent ) {
843  // JSONクラスポインタを設定する
844  rpcJson = pcJsonNew;
845  }
846  // 親JSONクラス種別を調べる
847  else if ( pcParent->IsJsonContainer() ) {
848  // JSONコンテナを取得する
849  CJsonContainer* pcJsonContainer = pcParent->GetJsonContainer();
850  if ( nullptr == pcJsonContainer ) {
851  // 失敗!
852  break;
853  }
854 
855  // JSONエレメントインデックスを取得する
856  int nIndex = pcJsonContainer->Find( rpcJson );
857  if ( 0 > nIndex ) {
858  // 失敗!
859  break;
860  }
861 
862  // JSONエレメントを取得する
863  CJson* pcJsonElement = pcJsonContainer->GetJsonElement( nIndex );
864  if ( nullptr != pcJsonElement ) {
865  // JSONエレメントを削除する
866  delete pcJsonElement;
867  }
868 
869  // JSONエレメントを設定する
870  if ( !pcJsonContainer->SetJsonElement( nIndex, pcJsonNew ) ) {
871  // 失敗!
872  break;
873  }
874 
875  // 最初の親JSONクラス種別を調べる
876  if ( pcParentFirst->IsJsonPair() ) {
877  // JSONクラスポインタを設定する
878  rpcJson = pcJsonNew->GetJsonValue();
879  }
880  else {
881  // JSONクラスポインタを設定する
882  rpcJson = pcJsonNew;
883  }
884  }
885  // 親JSONクラス種別を調べる
886  else if ( pcParent->IsJsonPair() ) {
887  // JSONペアを取得する
888  CJsonPair* pcJsonPair = pcParent->GetJsonPair();
889  if ( nullptr == pcJsonPair ) {
890  // 失敗!
891  break;
892  }
893 
894  // JSONバリューを設定する
895  if ( !pcJsonPair->SetJsonValue( pcJsonNew->GetJsonValue() ) ) {
896  // 失敗!
897  break;
898  }
899 
900  // JSONクラスポインタを設定する
901  rpcJson = pcJsonNew;
902  }
903  else {
904  // 失敗!
905  break;
906  }
907 
908  // 成功!
909  result = true;
910  } while ( false );
911 
912  // 実行結果を調べる
913  if ( !result ) {
914  // 新規作成JSONクラスを削除する
915  delete pcJsonNew;
916  }
917  } while ( false );
918 
919  // 実行結果を返す
920  return result;
921  }
static CJsonValue * CreateInputJson(CStream &rcStream, CJson *pcParent) noexcept
JSONバリュー入力作成関数
Definition: CJsonValue.cpp:46
static CJsonPair * CreateInputJson(CStream &rcStream, CJson *pcParent) noexcept
JSONペア入力作成関数
Definition: CJsonPair.cpp:199

呼び出し関係図:

被呼び出し関係図:

bool LibJson::CJsonDocument::DeleteJson ( CJson *&  rpcJson)
staticnoexcept

JSONクラス削除関数

JSONクラス削除関数です。

引数
[in,out]rpcJsonJSONクラスポインタ参照
戻り値
実行結果
  • true 成功
  • false 失敗
注意
なし

CJsonDocument.cpp の 925 行目に定義があります。

参照先 LibCommon::CArray< Type >::Find(), LibCommon::CArray< Type >::GetCount(), LibJson::CJson::GetJsonContainer(), LibJson::CJson::GetJsonParent(), LibJson::CJson::IsJsonContainer(), LibJson::CJson::IsJsonPair(), LibCommon::CArray< Type >::Remove().

参照元 LibJson::CJsonConfig::Delete(), DeleteCurrentJson().

925  {
926  // 処理ブロック
927  bool result = false;
928  do {
929  // JSONクラスポインタを調べる
930  if ( nullptr == rpcJson ) {
931  // 失敗!
932  break;
933  }
934 
935  // 親JSONクラスを取得する
936  CJson* pcParent = rpcJson->GetJsonParent();
937  if ( nullptr != pcParent ) {
938  // 親JSONクラス種別を調べる
939  if ( pcParent->IsJsonContainer() ) {
940  // JSONコンテナクラスを取得する
941  CJsonContainer* pcJsonContainer = pcParent->GetJsonContainer();
942  if ( nullptr == pcJsonContainer ) {
943  // 失敗!
944  break;
945  }
946 
947  // エレメントインデックスを取得する
948  int nIndex = pcJsonContainer->Find( rpcJson );
949  if ( 0 > nIndex ) {
950  // 失敗!
951  break;
952  }
953  // エレメントを削除する
954  else if ( !pcJsonContainer->Remove( nIndex ) ) {
955  // 失敗!
956  break;
957  }
958 
959  // JSONクラスを削除する
960  delete rpcJson;
961 
962  // エレメント数を調べる
963  int nCount = pcJsonContainer->GetCount();
964  if ( 0 == nCount ) {
965  // JSONクラスポインタを設定する
966  rpcJson = pcParent;
967  }
968  else {
969  // エレメント数を調べる
970  if ( nCount <= nIndex ) {
971  // インデックスを設定する
972  nIndex = ( nCount - 1 );
973  }
974 
975  // JSONクラスポインタを設定する
976  rpcJson = ( *pcJsonContainer )[ nIndex ];
977  }
978  }
979  // 親JSONクラス種別を調べる
980  else if ( pcParent->IsJsonPair() ) {
981  // 親JSONクラスを削除する
982  if ( !DeleteJson( pcParent ) ) {
983  // 失敗!
984  break;
985  }
986 
987  // JSONクラスポインタを設定する
988  rpcJson = pcParent;
989  }
990  else {
991  // 失敗!
992  break;
993  }
994  }
995  else {
996  // JSONクラスを削除する
997  delete rpcJson;
998 
999  // JSONクラスポインタをクリアする
1000  rpcJson = nullptr;
1001  }
1002 
1003  // 成功!
1004  result = true;
1005  } while ( false );
1006 
1007  // 実行結果を返す
1008  return result;
1009  }
static bool DeleteJson(CJson *&rpcJson) noexcept
JSONクラス削除関数

呼び出し関係図:

被呼び出し関係図:

bool LibJson::CJsonDocument::CreateJsonPath ( wchar_t const *  pszPath,
CJson *&  rpcJson 
)
staticnoexcept

JSONパス作成関数

JSONパス作成関数です。

引数
[in]pszPathJSONパス文字列
[in,out]rpcJsonJSONクラスポインタ参照
戻り値
実行結果
  • true 成功
  • false 失敗
注意
なし

CJsonDocument.cpp の 1013 行目に定義があります。

参照先 Dot, DotDot, Equal, LibJson::CJsonContainer::ExtendJsonElementCount(), LibCommon::CArray< Type >::Find(), LibCommon::CArray< Type >::GetCount(), LibJson::CJsonArray::GetJsonArray(), LibJson::CJson::GetJsonArray(), LibJson::CJsonObject::GetJsonObject(), LibJson::CJson::GetJsonObject(), LibJson::CJsonPair::GetJsonPair(), LibJson::CJsonObject::GetJsonPair(), LibJson::CJson::GetJsonPair(), LibJson::CJson::GetJsonParent(), LibJson::CJsonPair::GetJsonValue(), Index, InputPathToken(), Invalid, LibJson::CJson::IsJsonArray(), LibJson::CJson::IsJsonObject(), LibJson::CJson::IsJsonPair(), LibCommon::CStream::IsStreamEnd(), Name, LibCommon::CArray< Type >::Push(), Separator, LibJson::CJson::SetJsonParent(), SetJsonSetValueByStream(), LibJson::CJsonPair::SetJsonValue() (計28項目).

参照元 CreatePath().

1013  {
1014  // 処理ブロック
1015  bool result = false;
1016  do {
1017  // JSONパス文字列ポインタを調べる
1018  if ( nullptr == pszPath ) {
1019  // 失敗!
1020  break;
1021  }
1022 
1023  // 文字列ストリームを作成する
1024  CStringStream cStream( pszPath );
1025 
1026  // 巡回する
1028  int nToken = 0;
1029  for ( ;; ) {
1030  // ストリーム終端か調べる
1031  if ( cStream.IsStreamEnd() ) {
1032  // 成功!
1033  result = true;
1034  break;
1035  }
1036 
1037  // JSONクラスポインタを調べる
1038  CJson* pcParent = nullptr;
1039  if ( nullptr != rpcJson ) {
1040  // 親JSONクラスを取得する
1041  pcParent = rpcJson->GetJsonParent();
1042  }
1043 
1044  // JSONパストークンを入力する
1045  EJsonPathToken ePrev = eToken;
1046  CString cToken;
1047  eToken = InputPathToken( cStream, cToken, true );
1048  ++nToken;
1049 
1050  // JSONパストークン種別を調べる
1051  if ( EJsonPathToken::Separator == eToken ) {
1052  // 直前のJSONパストークン種別を調べる
1053  if ( EJsonPathToken::Separator == ePrev ) {
1054  // 失敗!
1055  break;
1056  }
1057  // トークン入力カウントを調べる
1058  else if ( 1 == nToken ) {
1059  // JSONクラスポインタを調べる
1060  if ( nullptr != rpcJson ) {
1061  // ルートJSONクラスを取得する
1062  rpcJson = rpcJson->GetJsonRoot();
1063  }
1064  }
1065  }
1066  // 直前のJSONパストークン種別を調べる
1067  else if ( ( EJsonPathToken::Dot == ePrev ) || ( EJsonPathToken::DotDot == ePrev ) ) {
1068  // 失敗!
1069  break;
1070  }
1071  // JSONパストークン種別を調べる
1072  else if ( EJsonPathToken::Dot == eToken ) {
1073  // 何もしない
1074  }
1075  // JSONパストークン種別を調べる
1076  else if ( EJsonPathToken::DotDot == eToken ) {
1077  // 親JSONクラスを調べる
1078  if ( nullptr == pcParent ) {
1079  // 失敗!
1080  break;
1081  }
1082  // 親JSONクラス種別を調べる
1083  else if ( pcParent->IsJsonPair() ) {
1084  // 親の親JSONクラスを取得する
1085  CJson* pcParentParent = pcParent->GetJsonParent();
1086  if ( nullptr != pcParentParent ) {
1087  // 親JSONクラスポインタを設定する
1088  pcParent = pcParentParent;
1089  }
1090  }
1091 
1092  // JSONクラスポインタを設定する
1093  rpcJson = pcParent;
1094  }
1095  // JSONパストークン種別を調べる
1096  else if ( EJsonPathToken::Name == eToken ) {
1097  // JSONクラスポインタを調べる
1098  CJsonObject* pcJsonObject = nullptr;
1099  CJsonPair* pcJsonPair = nullptr;
1100  if ( nullptr == rpcJson ) {
1101  // JSONオブジェクトを作成する
1102  pcJsonObject = new CJsonObject( nullptr );
1103  if ( nullptr == pcJsonObject ) {
1104  // 失敗!
1105  break;
1106  }
1107  }
1108  // JSONクラス種別を調べる
1109  else if ( rpcJson->IsJsonObject() ) {
1110  // JSONオブジェクトを取得する
1111  pcJsonObject = rpcJson->GetJsonObject();
1112  if ( nullptr == pcJsonObject ) {
1113  // 失敗!
1114  break;
1115  }
1116  }
1117  // 親JSONクラスポインタを調べる
1118  else if ( nullptr == pcParent ) {
1119  // JSONオブジェクトを作成する
1120  pcJsonObject = new CJsonObject( nullptr );
1121  if ( nullptr == pcJsonObject ) {
1122  // 失敗!
1123  break;
1124  }
1125  // JSONクラス種別を調べる
1126  else if ( rpcJson->IsJsonPair() ) {
1127  // JSONペアを取得する
1128  pcJsonPair = rpcJson->GetJsonPair();
1129  if ( nullptr == pcJsonPair ) {
1130  // 失敗!
1131  break;
1132  }
1133  // JSONペアを追加する
1134  else if ( !pcJsonObject->Push( pcJsonPair ) ) {
1135  // 失敗!
1136  break;
1137  }
1138 
1139  // 親JSONクラスを設定する
1140  rpcJson->SetJsonParent( pcJsonObject );
1141  }
1142  }
1143  // 親JSONクラス種別を調べる
1144  else if ( pcParent->IsJsonObject() ) {
1145  // JSONオブジェクトを取得する
1146  pcJsonObject = pcParent->GetJsonObject();
1147  if ( nullptr == pcJsonObject ) {
1148  // 失敗!
1149  break;
1150  }
1151  }
1152  // 親JSONクラス種別を調べる
1153  else if ( pcParent->IsJsonArray() ) {
1154  // 親JSON配列を取得する
1155  CJsonArray* pcParentArray = pcParent->GetJsonArray();
1156  if ( nullptr == pcParentArray ) {
1157  // 失敗!
1158  break;
1159  }
1160 
1161  // エレメントインデックスを取得する
1162  int nIndex = pcParentArray->Find( rpcJson );
1163  if ( 0 > nIndex ) {
1164  // 失敗!
1165  break;
1166  }
1167 
1168  // JSONオブジェクトを作成する
1169  pcJsonObject = new CJsonObject( pcParentArray );
1170  if ( nullptr == pcJsonObject ) {
1171  // 失敗!
1172  break;
1173  }
1174 
1175  // JSONバリューを削除する
1176  delete ( *pcParentArray )[ nIndex ];
1177 
1178  // JSONバリューを設定する
1179  ( *pcParentArray )[ nIndex ] = pcJsonObject;
1180  }
1181  // 親JSONクラス種別を調べる
1182  else if ( pcParent->IsJsonPair() ) {
1183  // 親JSONペアを取得する
1184  CJsonPair* pcParentPair = pcParent->GetJsonPair();
1185  if ( nullptr == pcParentPair ) {
1186  // 失敗!
1187  break;
1188  }
1189 
1190  // JSONオブジェクトを作成する
1191  pcJsonObject = new CJsonObject( pcParentPair );
1192  if ( nullptr == pcJsonObject ) {
1193  // 失敗!
1194  break;
1195  }
1196 
1197  // JSONバリューを設定する
1198  pcParentPair->SetJsonValue( pcJsonObject );
1199  }
1200  else {
1201  // 失敗!
1202  break;
1203  }
1204 
1205  // JSONペアを取得する
1206  pcJsonPair = pcJsonObject->GetJsonPair( cToken );
1207  if ( nullptr == pcJsonPair ) {
1208  // JSONペアを作成する
1209  pcJsonPair = new CJsonPair( pcJsonObject, cToken );
1210  if ( nullptr == pcJsonPair ) {
1211  // 失敗!
1212  break;
1213  }
1214  // JSONペアを追加する
1215  else if ( !pcJsonObject->Push( pcJsonPair ) ) {
1216  // 失敗!
1217  break;
1218  }
1219  }
1220 
1221  // JSONバリューを取得する
1222  rpcJson = pcJsonPair->GetJsonValue();
1223  }
1224  // JSONパストークン種別を調べる
1225  else if ( EJsonPathToken::Index == eToken ) {
1226  // JSONクラスポインタを調べる
1227  CJsonArray* pcJsonArray = nullptr;
1228  if ( nullptr == rpcJson ) {
1229  // JSON配列を作成する
1230  pcJsonArray = new CJsonArray( nullptr );
1231  if ( nullptr == pcJsonArray ) {
1232  // 失敗!
1233  break;
1234  }
1235  }
1236  // JSONクラス種別を調べる
1237  else if ( rpcJson->IsJsonArray() ) {
1238  // JSON配列を取得する
1239  pcJsonArray = rpcJson->GetJsonArray();
1240  if ( nullptr == pcJsonArray ) {
1241  // 失敗!
1242  break;
1243  }
1244  }
1245  // 親JSONクラスポインタを調べる
1246  else if ( nullptr == pcParent ) {
1247  // JSONクラス種別を調べる
1248  if ( rpcJson->IsJsonArray() ) {
1249  // JSON配列を取得する
1250  pcJsonArray = rpcJson->GetJsonArray();
1251  if ( nullptr == pcJsonArray ) {
1252  // 失敗!
1253  break;
1254  }
1255  }
1256  else {
1257  // JSON配列を作成する
1258  pcJsonArray = new CJsonArray( nullptr );
1259  if ( nullptr == pcJsonArray ) {
1260  // 失敗!
1261  break;
1262  }
1263  }
1264  }
1265  // 親JSONクラス種別を調べる
1266  else if ( pcParent->IsJsonArray() ) {
1267  // 親JSON配列を取得する
1268  CJsonArray* pcParentArray = pcParent->GetJsonArray();
1269  if ( nullptr == pcParentArray ) {
1270  // 失敗!
1271  break;
1272  }
1273 
1274  // エレメントインデックスを取得する
1275  int nIndex = pcParentArray->Find( rpcJson );
1276  if ( 0 > nIndex ) {
1277  // 失敗!
1278  break;
1279  }
1280 
1281  // JSON配列を作成する
1282  pcJsonArray = new CJsonArray( pcParentArray );
1283  if ( nullptr == pcJsonArray ) {
1284  // 失敗!
1285  break;
1286  }
1287 
1288  // JSONバリューを削除する
1289  delete ( *pcParentArray )[ nIndex ];
1290 
1291  // JSONバリューを設定する
1292  ( *pcParentArray )[ nIndex ] = pcJsonArray;
1293  }
1294  // 親JSONクラス種別を調べる
1295  else if ( pcParent->IsJsonPair() ) {
1296  // 親JSONペアを取得する
1297  CJsonPair* pcParentPair = pcParent->GetJsonPair();
1298  if ( nullptr == pcParentPair ) {
1299  // 失敗!
1300  break;
1301  }
1302 
1303  // JSON配列を作成する
1304  pcJsonArray = new CJsonArray( pcParentPair );
1305  if ( nullptr == pcJsonArray ) {
1306  // 失敗!
1307  break;
1308  }
1309 
1310  // JSONバリューを設定する
1311  pcParentPair->SetJsonValue( pcJsonArray );
1312  }
1313  else {
1314  // 失敗!
1315  break;
1316  }
1317 
1318  // インデックスを調べる
1319  int nIndex = static_cast< int >( ::wcstol( cToken, nullptr, 10 ) );
1320  if ( pcJsonArray->GetCount() <= nIndex ) {
1321  // JSONエレメント数を拡張する
1322  if ( !pcJsonArray->ExtendJsonElementCount( nIndex + 1 ) ) {
1323  // 失敗!
1324  break;
1325  }
1326  }
1327 
1328  // JSONエレメントを取得する
1329  rpcJson = ( *pcJsonArray )[ nIndex ];
1330  }
1331  // JSONパストークン種別を調べる
1332  else if ( EJsonPathToken::Equal == eToken ) {
1333  // JSON設定値を設定する
1334  if ( !SetJsonSetValueByStream( cStream, rpcJson ) ) {
1335  // 失敗!
1336  break;
1337  }
1338  }
1339  else {
1340  // 失敗!
1341  break;
1342  }
1343  }
1344  } while ( false );
1345 
1346  // 実行結果を返す
1347  return result;
1348  }
static EJsonPathToken InputPathToken(CStream &rcStream, CString &rcString, bool bEqual=false) noexcept
JSONパストークン入力関数
static bool SetJsonSetValueByStream(CStream &rcStream, CJson *&rpcJson) noexcept
JSON設定値ストリーム設定関数
EJsonPathToken
JSONパストークン種別列挙体

呼び出し関係図:

被呼び出し関係図:

bool LibJson::CJsonDocument::GetJsonPathList ( CString &  rcPathList,
CJson *  pcJson 
)
staticnoexcept

JSONパスリスト取得関数

JSONパスリスト取得関数です。

引数
[out]rcPathList文字列クラス参照
[in]pcJsonJSONクラスポインタ
戻り値
実行結果
  • true 成功
  • false 失敗
注意
なし

CJsonDocument.cpp の 1352 行目に定義があります。

参照先 LibCommon::CString::GetBuffer(), LibCommon::CArray< Type >::GetCount(), LibJson::CJsonContainer::GetJsonContainer(), GetJsonPath(), GetJsonSetValue().

1352  {
1353  // 処理ブロック
1354  bool result = false;
1355  do {
1356  // JSONクラスポインタを調べる
1357  if ( nullptr == pcJson ) {
1358  // 失敗!
1359  break;
1360  }
1361  // JSONクラス種別を調べる
1362  else if ( pcJson->IsJsonContainer() ) {
1363  // JSONコンテナを取得する
1364  CJsonContainer* pcJsonContainer = pcJson->GetJsonContainer();
1365  if ( nullptr == pcJsonContainer ) {
1366  // 失敗!
1367  break;
1368  }
1369 
1370  // JSONクラスエレメント数を調べる
1371  int nCount = pcJsonContainer->GetCount();
1372  if ( 0 == nCount ) {
1373  // JSONパスを取得する
1374  CString cPath;
1375  if ( !GetJsonPath( cPath, pcJson ) ) {
1376  // 失敗!
1377  break;
1378  }
1379  // パスリストに追加する
1380  else if ( !rcPathList.Push( cPath ) ) {
1381  // 失敗!
1382  break;
1383  }
1384 
1385  // JSON設定値文字列を取得する
1386  CString cValue;
1387  if ( !GetJsonSetValue( cValue, pcJson, true ) ) {
1388  // 失敗!
1389  break;
1390  }
1391  // パスリストに追加する
1392  else if ( !rcPathList.Push( CString().Format( L" = %s\n", cValue.GetBuffer() ) ) ) {
1393  // 失敗!
1394  break;
1395  }
1396  }
1397  else {
1398  // 巡回する
1399  int nIndex = 0;
1400  for ( ; nCount > nIndex; ++nIndex ) {
1401  // JSONクラス要素を取得する
1402  CJson* pcJsonElement = ( *pcJsonContainer )[ nIndex ];
1403 
1404  // パスリストを取得する
1405  if ( !GetJsonPathList( rcPathList, pcJsonElement ) ) {
1406  // 失敗!
1407  nIndex = -1;
1408  break;
1409  }
1410  }
1411 
1412  // インデックスを調べる
1413  if ( 0 > nIndex ) {
1414  // 失敗!
1415  break;
1416  }
1417  }
1418  }
1419  // JSONクラス種別を調べる
1420  else if ( pcJson->IsJsonToken() ) {
1421  // JSONパスを取得する
1422  CString cPath;
1423  if ( !GetJsonPath( cPath, pcJson ) ) {
1424  // 失敗!
1425  break;
1426  }
1427  // パスリストに追加する
1428  else if ( !rcPathList.Push( cPath ) ) {
1429  // 失敗!
1430  break;
1431  }
1432 
1433  // JSON設定値文字列を取得する
1434  CString cValue;
1435  if ( !GetJsonSetValue( cValue, pcJson, true ) ) {
1436  // 失敗!
1437  break;
1438  }
1439  // パスリストに追加する
1440  else if ( !rcPathList.Push( CString().Format( L" = %s\n", cValue.GetBuffer() ) ) ) {
1441  // 失敗!
1442  break;
1443  }
1444  }
1445  // JSONクラス種別を調べる
1446  else if ( pcJson->IsJsonPair() ) {
1447  // パスリストを取得する
1448  if ( !GetJsonPathList( rcPathList, pcJson->GetJsonValue() ) ) {
1449  // 失敗!
1450  break;
1451  }
1452  }
1453  else {
1454  // 失敗!
1455  break;
1456  }
1457 
1458  // 成功!
1459  result = true;
1460  } while ( false );
1461 
1462  // 実行結果を返す
1463  return result;
1464  }
static bool GetJsonSetValue(CString &rcValue, CJson *pcJson, bool bClassName=false, bool bQuotes=true) noexcept
JSON設定値文字列取得関数
static bool GetJsonPathList(CString &rcPathList, CJson *pcJson) noexcept
JSONパスリスト取得関数
static bool GetJsonPath(CString &rcPath, CJson *pcJson) noexcept
JSONパス取得関数

呼び出し関係図:

CJsonDocument::EJsonPathToken LibJson::CJsonDocument::InputPathToken ( CStream &  rcStream,
CString &  rcString,
bool  bEqual = false 
)
staticprotectednoexcept

JSONパストークン入力関数

JSONパストークン入力関数です。

引数
[in]rcStream入力ストリーム参照
[out]rcToken文字列クラス参照
[in]bEqual等号許可フラグ
戻り値
JSONパストークン種別
注意
なし

CJsonDocument.cpp の 1470 行目に定義があります。

参照先 Dot, DotDot, Equal, Index, LibJson::CJsonToken::InputJsonChars(), LibJson::CJsonToken::InputJsonInt(), Invalid, Name, Separator.

参照元 CreateJsonPath(), FindJsonPath().

1470  {
1471  // 処理ブロック
1473  do {
1474  // ストリームポインタを取得する
1475  int nPoint = rcStream.GetStreamPoint();
1476 
1477  // 1文字入力する
1478  wchar_t ch;
1479  if ( !rcStream.InputChar( ch ) ) {
1480  // 失敗!
1481  break;
1482  }
1483  // 文字コードを調べる
1484  else if ( L'/' == ch ) {
1485  // JSONパスセパレータを設定する
1486  rcString.Push( ch );
1487  result = EJsonPathToken::Separator;
1488  }
1489  // 文字コードを調べる
1490  else if ( L'.' == ch ) {
1491  // JSONパスドットを設定する
1492  rcString.Push( ch );
1493  result = EJsonPathToken::Dot;
1494 
1495  // ストリームポインタを取得する
1496  nPoint = rcStream.GetStreamPoint();
1497 
1498  // 1文字入力する
1499  if ( rcStream.InputChar( ch ) ) {
1500  // 文字コードを調べる
1501  if ( L'.' == ch ) {
1502  // JSONパス二重ドットを設定する
1503  rcString.Push( ch );
1504  result = EJsonPathToken::DotDot;
1505  }
1506  else {
1507  // ストリームポインタを設定する
1508  rcStream.SetStreamPoint( nPoint );
1509  }
1510  }
1511  }
1512  // 文字コードを調べる
1513  else if ( L'[' == ch ) {
1514  // 空白をスキップする
1515  rcStream.SkipSpace();
1516 
1517  // JSON整数を取得する
1518  CJsonToken cJsonToken( nullptr );
1519  if ( !cJsonToken.InputJsonInt( rcStream ) ) {
1520  // 失敗!
1521  break;
1522  }
1523 
1524  // 空白をスキップする
1525  rcStream.SkipSpace();
1526 
1527  // 1文字スキップする
1528  if ( !rcStream.SkipChar( L']' ) ) {
1529  // 失敗!
1530  break;
1531  }
1532 
1533  // JSONパスインデックスを設定する
1534  rcString.Push( cJsonToken );
1535  result = EJsonPathToken::Index;
1536  }
1537  // 文字コードを調べる
1538  else if ( bEqual && ( L'=' == ch ) ) {
1539  // 空白をスキップする
1540  rcStream.SkipSpace();
1541 
1542  // JSONパス等号を設定する
1543  rcString.Push( L'=' );
1544  result = EJsonPathToken::Equal;
1545  }
1546  // 文字コードを調べる
1547  else if ( bEqual && ( 0 != ::iswspace( ch ) ) ) {
1548  // 空白をスキップする
1549  rcStream.SkipSpace();
1550 
1551  // 1文字スキップする
1552  if ( !rcStream.SkipChar( L'=' ) ) {
1553  // 失敗!
1554  break;
1555  }
1556 
1557  // 空白をスキップする
1558  rcStream.SkipSpace();
1559 
1560  // JSONパス等号を設定する
1561  rcString.Push( L'=' );
1562  result = EJsonPathToken::Equal;
1563  }
1564  else {
1565  // 文字コードを調べる
1566  CJsonToken cJsonToken( nullptr );
1567  if ( L'\"' == ch ) {
1568  // JSON文字集合を取得する
1569  if ( !cJsonToken.InputJsonChars( rcStream ) ) {
1570  // 失敗!
1571  break;
1572  }
1573  // 1文字スキップする
1574  else if ( !rcStream.SkipChar( L'\"' ) ) {
1575  // 失敗!
1576  break;
1577  }
1578  }
1579  else {
1580  // ストリームポインタを設定する
1581  rcStream.SetStreamPoint( nPoint );
1582 
1583  // JSON文字集合を取得する
1584  if ( !cJsonToken.InputJsonChars( rcStream, L"/[= " ) ) {
1585  // 失敗!
1586  break;
1587  }
1588  }
1589 
1590  // JSONパス名前を設定する
1591  rcString.Push( cJsonToken );
1592  result = EJsonPathToken::Name;
1593  }
1594  } while ( false );
1595 
1596  // 実行結果を返す
1597  return result;
1598  }
EJsonPathToken
JSONパストークン種別列挙体

呼び出し関係図:

被呼び出し関係図:

bool LibJson::CJsonDocument::DeleteQuotes ( CString &  rcString)
staticprotectednoexcept

JSON文字列二重引用符削除関数

JSON文字列二重引用符削除関数です。

引数
[out]rcString文字列参照
戻り値
実行結果
  • true 成功
  • false 失敗
注意
なし

CJsonDocument.cpp の 1602 行目に定義があります。

1602  {
1603  // 処理ブロック
1604  bool result = false;
1605  do {
1606  // 文字列長を取得する
1607  int nLen = rcString.GetCount();
1608  if ( 2 > nLen ) {
1609  // 失敗!
1610  break;
1611  }
1612  // 先頭の文字コードを調べる
1613  else if ( L'\"' != rcString[ 0 ] ) {
1614  // 失敗!
1615  break;
1616  }
1617  // 最後尾の文字コードを調べる
1618  else if ( L'\"' != rcString[ nLen - 1 ] ) {
1619  // 失敗!
1620  break;
1621  }
1622  // 最後尾の文字を削除する
1623  else if ( rcString.Remove( ( nLen - 1 ) ) ) {
1624  // 失敗!
1625  break;
1626  }
1627  // 先頭の文字を削除する
1628  else if ( rcString.Remove( 0 ) ) {
1629  // 失敗!
1630  break;
1631  }
1632 
1633  // 成功!
1634  result = true;
1635  } while ( false );
1636 
1637  // 実行結果を返す
1638  return result;
1639  }
CJsonDocument& LibJson::CJsonDocument::operator= ( CJsonDocument const &  )
privatedelete

メンバ詳解

CJson* LibJson::CJsonDocument::m_pcJsonRoot
protected
CJson* LibJson::CJsonDocument::m_pcJsonCurrent
protected

このクラス詳解は次のファイルから抽出されました: