4

rapidjson::Valueメソッドのタイプを尋ねると、以下のGetType()タイプのみが返されます。

//! Type of JSON value
enum Type {
    kNullType = 0,      //!< null
    kFalseType = 1,     //!< false
    kTrueType = 2,      //!< true
    kObjectType = 3,    //!< object
    kArrayType = 4,     //!< array
    kStringType = 5,    //!< string
    kNumberType = 6     //!< number
};

ご覧のとおり、そのようなkIntTypeものもkDoubleType(もkUintType, kInt64Type) もありません。そのため、 の実際の値を取得できませんrapidjson::Value

例えば:

if (value.GetType() == rapidjson::kNumberType)
{
    double v = value.GetDouble()        // this?
    unsigned long v = value.GetUInt64() // or this??
    int v = value.GetInt()              // or this?
}

とにかく実際の数値型を区別する方法はありますか?

ありがとう。

4

1 に答える 1

11

がある:

  1. bool Value::IsInt() const
  2. bool Value::IsUint() const
  3. bool Value::IsInt64() const
  4. bool Value::IsUint64() const
  5. bool Value::IsDouble() const

1 ~ 4 は互いに排他的ではないことに注意してください。たとえば、値123は 1 ~ 4 を返しますtrueが、5 は を返しfalseます。または 1-5 がの場合、呼び出しGetDouble()は常に OK ですが、値が実際に 64 ビット (符号なし) 整数である場合は精度が失われる可能性があります。IsNumber()true

http://miloyip.github.io/rapidjson/md_doc_tutorial.html#QueryNumber

于 2015-05-03T11:57:42.937 に答える