2011-10-13 52 views
0

我注意到SBJson失敗這個JSON字符串解碼:SBJSon不喜歡[]在JSON字符串字符

[{"JNAME":"VERSION","DATE": "20111012","TIME": "145020"}] 

如果我刪除[]中的字符串successuffly解碼,並返回一個NSDictionnary

我的代碼:

不工作(返程無):

SBJsonParser *parser = [[SBJsonParser new] autorelease]; 

NSError *error = nil; 

NSDictionary *dict = [ parser objectWithString:result error:&error ]; 

工作:

SBJsonParser *parser = [[SBJsonParser new] autorelease]; 

NSInteger len  = [result length]; 

NSError *error = nil 

NSString *result2 = [result substringWithRange:NSMakeRange(1, len - 2) ]; 


NSDictionary *dict = [ parser objectWithString:result error:&error ]; 

任何想法爲什麼? (:用PHP前)將字符串解碼成功:因爲如果我使用的在線分析器或他人的Json解碼功能,它奇怪

php > $json = '[{"JNAME":"VERSION","DATE": "20111012","TIME": "145020"}]'; 
php > print_r(json_decode($json)); 
Array 
(
    [0] => stdClass Object 
    (
     [JNAME] => VERSION 
     [DATE] => 20111012 
     [TIME] => 145020 
    ) 

) 
+0

用「[]」會發生什麼?你會得到什麼錯誤? (當然,你會意識到使用「[]」會得到一個數組,而不是字典。) –

+0

你說得對,如果我把它轉換成NSArray而不是NSDictionary,它就可以工作! –

+1

當然我是對的。 JSON解析器返回JSON字符串的任何類型 - 可以是數組,字典或單個字面值int/string/boolean。在一般情況下(您不知道JSON字符串中的內容),您需要在假設任何事情之前測試該類型。 –

回答

1

如果你想要一個數組,你應該有

{"arrayname" : [{"JNAME":"VERSION","DATE": "20111012","TIME": "145020"}]} 

的NSArray的將有1個NSDictionary元素。你可以檢查JSON的有效性here。請注意,解析器會爲您提供一個包含key @「arrayname」數組的字典。

+0

這是一個語法錯誤。 –

+0

@DanielRHicks謝謝你指出,它不再是... – jbat100

+0

對不起,我忘了提及我的結果var是NSDictonary我要編輯我的帖子。 –