标签: touchjson

使用TouchJSON反序列化复杂的JSON结果(字典数组)

我昨晚用TouchJSON做了一些测试,对于简单的情况,它的效果非常好.我正在使用以下代码从文件中读取一些JSON内容,并反序列化它:

NSString *jsonString = [[NSString alloc] initWithContentsOfFile:@"data.json"];
NSData *jsonData = [jsonString dataUsingEncoding:NSUTF32BigEndianStringEncoding];
NSError *error = nil;
NSDictionary *items = [[CJSONDeserializer deserializer] deserializeAsDictionary:jsonData error:&error];
NSLog(@"total items: %d", [items count]);
NSLog(@"error: %@", [error localizedDescription]);
Run Code Online (Sandbox Code Playgroud)

如果我在文件中有一个非常简单的JSON对象(即字典),那很好用:

{"id": "54354", "name": "boohoo"}
Run Code Online (Sandbox Code Playgroud)

这样我就可以访问值数组,因为我想根据列表中的索引获取项目:

NSArray *items_list = [items allValues];
NSString *name = [items_list objectAtIndex:1];
Run Code Online (Sandbox Code Playgroud)

(我知道我可以用字典API获取名称)

现在我想反序列化一个半复杂的JSON字符串,它表示一个字典数组.下面是这样一个JSON字符串的示例:

[{"id": "123456", "name": "touchjson"}, {"id": "3456", "name": "bleh"}]
Run Code Online (Sandbox Code Playgroud)

当我尝试对data.json文件中的这个新内容运行上面的相同代码时,我没有得到任何结果.我的NSLog()调用说"总项目:0",并且NSError对象中没有错误返回.

有关正在发生的事情的任何线索?我完全迷失了该做什么,因为TouchJSON没有太多可用的文档,而且使用示例也少得多.

iphone json touchjson

18
推荐指数
2
解决办法
2万
查看次数

TouchJSON,处理NSNull

嗨,我正在使用TouchJSON反序列化一些JSON.我过去一直在使用它,在那些情况下我手动处理了NSNull的出现.我认为作者也必须处理这个,所以我再这样做只会是开销.然后我在文档中找到了这个:

避免输出中的NSNull值.

NSData *theJSONData = /* some JSON data */
CJSONDeserializer *theDeserializer = [CJSONDeserializer deserializer];
theDeserializer.nullObject = NULL;
NSError *theError = nil;
id theObject = [theDeserializer deserialize:theJSONData error:&theError];}
Run Code Online (Sandbox Code Playgroud)

我理解它的方式是类的用户可以将C样式的空指针传递给反序列化器,当它遇到NSNull时,它将插入传递给它的值(NULL).所以稍后当我使用这些值时,我不会得到NSNull,而是NULL.

这看起来很奇怪,返回值是一个只能包含Objects的NSDictionary,不应该默认值为'nil'吗?

如果是NULL,我可以检查这样的值吗?

if([jsonDataDict objectForKey:someKey] == NULL)
Run Code Online (Sandbox Code Playgroud)

能够做到这一点似乎更符合逻辑:

if(![jsonDataDict objectForKey:someKey])
Run Code Online (Sandbox Code Playgroud)

更不用说允许传递nil但传递NULL导致崩溃的所有情况.

或者我可以将'nil'传递给解串器吗?

这很大程度上源于我仍在努力与nil,NULL,[NSNULL null],也许我没有看到使用nil的潜在警告.

null objective-c touchjson

16
推荐指数
2
解决办法
1万
查看次数

在iOS SDK 4.2的MonoTouch项目中使用AdMob

在iOS SDK 4.2的MonoTouch项目中使用AdMob

我们有一个测试项目尝试将AdMob与MonoTouch一起使用.设置如下:

我们创建了一个(胖)TouchJSON库,如TouchJSON的Monotouch绑定中所述?

我们有一个Libs库,其中包含此libTouchJSON.a和AdMob提供的libAdMobNoThumb.a库.在那里,我还有一个来自AdMob.cs文件的btouch的AdMob.dll,它定义了我们想要使用的(有限的一组)Admob方法.此dll将添加到项目的引用中

我们提供以下额外标志:

-v -v -v -gcc_flags "-L${ProjectDir}/../Libs -lAdMobNoThumb -lTouchJSON -force_load ${ProjectDir}/../Libs/libAdMobNoThumb.a -force_load ${ProjectDir}/../Libs/libTouchJSON.a"
Run Code Online (Sandbox Code Playgroud)

我们选择"不链接"作为链接器行为.

这曾经使用了admob库的SDK 4.2之前的版本.但现在有了4.2版本,我们得到了

ld: framework not found AudioUnit 
Run Code Online (Sandbox Code Playgroud)

错误.我们已经读过,解决方案是"重新启动链接器".但是如果我们进行链接(如上所述保留其余的设置),我们会从admob库中获得许多未知符号:

Error 1: mtouch failed with the following message:
/var/folders/hF/hF42FIdhEUmY1y-pGRsu1k+++TI/-Tmp-/tmp2685841f.tmp/main.m: In function 'monotouch_debug_connect':
/var/folders/hF/hF42FIdhEUmY1y-pGRsu1k+++TI/-Tmp-/tmp2685841f.tmp/main.m:1779: warning: implicit declaration of function 'select'
/var/folders/hF/hF42FIdhEUmY1y-pGRsu1k+++TI/-Tmp-/tmp2685841f.tmp/main.m: In function 'main':
/var/folders/hF/hF42FIdhEUmY1y-pGRsu1k+++TI/-Tmp-/tmp2685841f.tmp/main.m:1821: warning: implicit declaration of function 'chdir'
/var/folders/hF/hF42FIdhEUmY1y-pGRsu1k+++TI/-Tmp-/tmp2685841f.tmp/main.m:1838: warning: implicit declaration of function 'monotouch_enable_debug_tracking'
/var/folders/hF/hF42FIdhEUmY1y-pGRsu1k+++TI/-Tmp-/tmp2685841f.tmp/main.m:1914: warning: implicit declaration of function 'dup2'
/var/folders/hF/hF42FIdhEUmY1y-pGRsu1k+++TI/-Tmp-/tmp2685841f.tmp/main.m:1921: warning: implicit declaration of function 'mini_get_debug_options'
/var/folders/hF/hF42FIdhEUmY1y-pGRsu1k+++TI/-Tmp-/tmp2685841f.tmp/main.m:1925: …
Run Code Online (Sandbox Code Playgroud)

iphone touchjson monodevelop xamarin.ios admob

0
推荐指数
1
解决办法
2279
查看次数

标签 统计

touchjson ×3

iphone ×2

admob ×1

json ×1

monodevelop ×1

null ×1

objective-c ×1

xamarin.ios ×1