3

ドキュメントをCoreFoundationタイプに変換するために使用NSJSONSerializationしています。JSON

私の中にJSONは「数字」というフィールドがあります。整数の場合もあれば、浮動小数点の場合もあります。

さて、問題は、私をにNSJSONSerialization変えて、objectForKeyを使用して数値を抽出しようとすると、intになることもあれば、doubleになることもあります。単にラッパーに残すのではなく、実際に値のボックスを解除して、それをに挿入するようです。JSONNSDictionaryNSJSONSerializationNSNumberNSDictionary

非常に奇妙な。プリミティブをに入れることになっていると思いましたNSDictionary。したがって、私が今抱えている問題は、実際の数値を保持するためにキャストする必要があるタイプ(intまたはdouble)がわからないことです。

誰かが抜け道を知っていますか?

4

2 に答える 2

3

NSNumber からプリミティブ型を取得できます。次のコード スニペットを使用するだけです。

    const char* type = [theValue objCType];
if (strcmp (type, @encode (NSInteger)) == 0) {
    //It is NSInteger
} else if (strcmp (type, @encode (NSUInteger)) == 0) {
    //It is NSInteger
} else if (strcmp (type, @encode (int)) == 0) {
    //It is NSUInteger
} else if (strcmp (type, @encode (float)) == 0) {
    //It is float
} else if (strcmp (type, @encode (double)) == 0) {
    //It is double
} else if (strcmp (type, @encode (long)) == 0) {
    //It is long
} else if (strcmp (type, @encode (long long)) == 0) {
    //It is long long
}

や。。など。

于 2013-02-19T14:13:57.177 に答える
0

それらはずっとNSNumbersであることがわかり、私はデバッグに不慣れです。デバッガーがそれらを提示する方法であるため、私は混乱して、それらがint値とdouble値であると思いました。つまり、NSJSONSerializationではなく、ボックス化を解除したのはデバッガーです...

于 2013-02-19T14:16:34.757 に答える