Не удается прочитать конкретные значения файла JSON в объективе C - PullRequest
0 голосов
/ 11 июня 2018

Я загрузил файлы json в свою папку приложений и хочу прочитать эти файлы из моей папки приложений для печати определенных значений.

Файлы расположены следующим образом: /var/mobile/Containers/Data/Application/63E66EE9-9A1B-4D4D-AEF6-F8C54D159ED0/Library/NoCloud/MyApp/MyFolder/DTS.json

Вот что содержит файл: [{"value": 0}] Однако содержимое файла читается и печатается в консоли, как я уже упоминал ниже, но когда я читаю конкретное значение, оно дает ноль

NSURL *libraryDirURL = [[NSFileManager.defaultManager URLsForDirectory:NSLibraryDirectory inDomains:NSUserDomainMask] lastObject];
NSURL *urlDTSK = [libraryDirURL URLByAppendingPathComponent:@"NoCloud/MyApp/MyFolder/DTS.json"];
NSString *filePathDTS = [NSString stringWithContentsOfURL:urlDTSK encoding:NSUTF8StringEncoding error:nil];
NSLog(@"This is Dts PATH %@", filePathDTS);
NSData *dataDTS = [NSData dataWithContentsOfFile:filePathDTS];
NSLog(@"here is DTS data  %@", dataDTS); //this shows null
NSDictionary *jsonDTS = [NSJSONSerialization JSONObjectWithData:dataDTS options:kNilOptions error:nil];
NSLog(@"here is jason DTS %@", jsonDTS);
NSMutableArray *DTSvalue = [jsonDTS valueForKeyPath: @"Value"];
DTSValueIs = DTSvalue[0];
NSLog(@"here is DTS Value first%@", DTSvalue[0]);
NSLog(@"here is DTS value is%@", DTSValueIs);

Это показываетThis is Dts contents [{"value":0}] 2018-06-11 17:04:40.940006+0500 Muslims 365[3356:819935] here is DTS data (null)

Ответы [ 3 ]

0 голосов
/ 11 июня 2018

Ошибка возникает из-за того, что вы получаете NSString из URL-адреса файла, а затем вы получаете NSData из этой строки в качестве пути к файлу, который не может работать.Пропустите этот шаг:

NSURL *libraryDirURL = [[NSFileManager.defaultManager URLsForDirectory:NSLibraryDirectory inDomains:NSUserDomainMask] lastObject];
NSURL *urlDTSK = [libraryDirURL URLByAppendingPathComponent:@"NoCloud/MyApp/MyFolder/DTS.json"];
NSData *dataDTS = [NSData dataWithContentsOfURL: urlDTSK];

По тому, как извлеченный JSON является массивом, вы получаете значение для ключа Value из первого элемента, который выглядит как числовое значение (NSNumber).

И справиться с ошибкой!

NSError *error;
NSArray *jsonArray = [NSJSONSerialization JSONObjectWithData:dataDTS options:kNilOptions error:&error];
if (error) { NSLog(@"%@", error); }
NSNumber *dtsValue = jsonArray[0][@"value"];
NSLog(@"here is DTS value: %@", dtsValue); // here is DTS value: 0
0 голосов
/ 11 июня 2018

В вашем коде вы должны выделить

NSMutableArray * DTSvalue = [NSMutableArray alloc] init];

перед использованием.

0 голосов
/ 11 июня 2018

Итак, libraryDirURL - это путь к библиотеке.Тогда urlDTSK - это путь к конкретному файлу в библиотеке.Тогда filePathDTS - это СОДЕРЖАНИЕ этого файла в библиотеке в виде строки UTF8 ...

Но dataDTS - это содержимое файла в месте, записанном в файле в filePathDTS.Я считаю, что код должен быть:

NSData *dataDTS = [NSData dataWithContentsOfFile: urlDTSK.path];
...