Есть ли способ разобрать файл serializeJSON в цель C - PullRequest
0 голосов
/ 02 сентября 2011

Я пытаюсь проанализировать файл JSON, созданный на сервере ColdFusion, в формате SerializeJSON. Есть ли какой-то конкретный способ для анализа файла serializeJSON. Он отличается от обычного файла Twitter JSON. Как разобрать файл JSON в таком формате? Я использую файл SBJSON для анализа этого.

{
"ROWCOUNT": 2,
"COLUMNS": [
    "ID",
    "TITLE",
    "CLASS_START",
    "CLASS_END",

],
"DATA": {
    "KEY_ID": [
        "a11c1a361a38",
        "6be127103538"
    ],
    "TITLE": [
        "Test                                                                                                                                                                                                                                                      ",
        "Test2                                                                                                                                                                                                                                       "
    ],
    "CLASS_START": [
        "October, 25 2011 00:00:00",
        "October, 26 2011 14:47:00"
    ],
    "CLASS_END": [
        "October, 25 2011 00:00:00",
        "October, 27 2011 14:47:00"
    ]

}
}

код для разбора:

NSString *jsonString = [self jsonFromURLString:urlString];
NSData *jsonData = [jsonString dataUsingEncoding:NSUTF32BigEndianStringEncoding];
NSLog(@"dATA : %@", jsonData);
// Parse JSON results with TouchJSON.  It converts it into a dictionary.
CJSONDeserializer *jsonDeserializer = [CJSONDeserializer deserializer];
NSError *error = nil;
NSDictionary *resultsDictionary = [jsonDeserializer deserializeAsDictionary:jsonData error:&error];
[self handleError:error];


NSDictionary *dict = [resultsDictionary objectForKey:@"DATA"];
NSLog(@"dict : %@", dict);

for (NSArray *data in dict) {
    NSDictionary *title = [data objectAtIndex:0]; /**** Errors here saying [NSCFString objectforkey] not recognised  was getting the same error before too****/

    NSLog(@"Title : %@", title);
}

Вывод моего словаря:

dict : {

"CLASS_END" =     (
    "October, 25 2011 00:00:00",
    "October, 27 2011 14:47:00"
);
"CLASS_START" =     (
    "October, 25 2011 00:00:00",
    "October, 26 2011 14:47:00"
);


"KEY_ID" =     (
    "a11c1a361a38",
    "6be127103538"
);

TITLE =     (
    "Test",                                                                                                                                                                                                                                                    
    "Test2"                                                                                                                                                                                                                                       
)
 }

Ответы [ 3 ]

1 голос
/ 14 марта 2012

Не знаю, нужен ли вам ответ, но понял! Возвращение Json из Coldfusion - это действительно NSArray. Ничего более, не менее сложного для разбора

Ключ соответствует именам столбцов со значениями ...

Надеюсь, что в полной мере это поможет.

// Функция записи ЗДЕСЬ - (NSString *) getQueryValue: (NSArray *) queryData queryColumns: (NSArray *) querycolumns queryColumn: (NSString *) querycolumn {

NSString *arrayValue;
NSString *returnValue = nil;

//Loop Through Query Columns To Find Node
for(int i=0; i< [querycolumns count];i++){
    arrayValue = [NSString stringWithFormat:@"%@",[querycolumns objectAtIndex:i]]; //Cast Value To String

    NSRange searchResult = [arrayValue rangeOfString:querycolumn options:NSCaseInsensitiveSearch];

    if(searchResult.location != NSNotFound){
        //Found NODE NOW BREAK
        return [NSString stringWithFormat:@"%@",[queryData objectAtIndex:i]];
        break;
    } 

}

return returnValue;

}

/ ************* ***************** ************ * * Частный раздел реализации * ******************************* *********** /

Прагма Марк -

Прагма Марк Личные методы

/ * --------------------------------------------- ---------------- * ----------------------------------------------- ------------- / - (недействительное) соединение: (NSURLConnection *) соединение didReceiveData: (NSData *) данные { // Сохраняем входящие данные в строку NSString * jsonString = [[NSString alloc] initWithData: кодировка данных: NSUTF8StringEncoding];

// Create a dictionary from the JSON string
NSDictionary *results = [jsonString JSONValue];

// Build an array from the dictionary for easy access to each entry
NSArray *categoryKeys = [results objectForKey:@"COLUMNS"];
NSArray *categoryArray = [results objectForKey:@"DATA"];


NSLog(@"Category Count from json...%i",[categoryArray count]);


// Loop through each entry in the dictionary...
for (NSArray *category in categoryArray)
{
    // Get title of the image
    NSString *categoryname = [self getQueryValue:category queryColumns:categoryKeys queryColumn:@"categoryname"]; //Case Insensative
    NSString *categoryid = [self getQueryValue:category queryColumns:categoryKeys queryColumn:@"categoryid"]; //Case Insensative

}

}

Дааа ... Это Гров

0 голосов
/ 02 сентября 2011
NSArray *array = [resultsDictionary objectForKey:@"DATA"];
NSLog(@"array : %@", array);

Запись «DATA» является «объектом», а не массивом. Если вы посмотрите на то, что было зарегистрировано, вы увидите, что оно ведет словарь.

JSON "объекты" начинаются с "{", а массивы начинаются с "[".

0 голосов
/ 02 сентября 2011

используйте библиотеку типа https://github.com/TouchCode/TouchJSON

затем, после получения данных с вашего сервера Cold Fusion, выполните что-то вроде:

NSDictionary *jsonDictionary = [[CJSONDeserializer deserializer] deserializeAsDictionary:data error:&error];

и это даст вам словарь с объектом json.

Есть способы пойти в другом направлении с CJSONSerializer

...