簡體   English   中英

如何在Objective-C中解析文本文件中的JSON數據

[英]How to parse JSON data from textual file in Objective-C

我知道,JSON解析問題一遍又一遍地問,但是我仍然找不到這個的答案。
我一直試圖使用NSJSONSerialization讀取和解析文本JSON文件,但無濟於事。
我試過使用來自NSString的相同JSON數據,它確實起作用。
這是代碼:

NSError      *error;

NSString     *jsonString1 = [NSString stringWithContentsOfFile:jsonFilePath
                                                      encoding:NSUTF8StringEncoding
                                                         error:&error];
NSData       *jsonData1   = [jsonString1 dataUsingEncoding:NSUTF8StringEncoding];
NSDictionary *jsonObject1 = [NSJSONSerialization JSONObjectWithData:jsonData1
                                                            options:0
                                                              error:&error];

NSString     *jsonString2 = @"{\"key\":\"value\"}";
NSData       *jsonData2   = [jsonString2 dataUsingEncoding:NSUTF8StringEncoding];
NSDictionary *jsonObject2 = [NSJSONSerialization JSONObjectWithData:jsonData2
                                                            options:0
                                                              error:&error];

-文本文件包含一行:{“ key”:“ value”}
-jsonString1 = @“ {” key“:” value“}”
-jsonString2 = @“ {\\” key \\“:\\” value \\“}”
-jsonData1的大小為23個字節
-jsonData2的大小為15個字節
-jsonObject1為零,我收到錯誤代碼3840
-jsonObject2是有效的字典

似乎問題在於讀取文件,因為NSStrings和NSDatas不同,但是我在這里做錯了什么,該如何解決?

您的文件很可能包含一些無法打印的字符(例如\\ 0),這些字符會觸發失敗。 打印錯誤消息將告訴您第一個無效字符出現在什么位置。

例如,嘗試打印"{\\"key\\":\\u{0000}\\"value\\"}" ,您似乎會獲得有效的JSON,但是解碼失敗。

使用NSUTF8StringEncoding進行任何操作時,我始終會檢查返回值,如果為nil,請嘗試使用NSASCIIStringEncoding:

NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
if (jsonString == nil) {
    jsonString = [[NSString alloc] initWithData:jsonData encoding:NSASCIIStringEncoding];
}

return jsonString;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM