-1

我正在尝试以 SerializeJSON 格式解析从 ColdFusion 服务器生成的 JSON 文件。是否有任何特定的方法来解析 serializeJSON 文件。它不同于普通的 Twitter Feed 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"                                                                                                                                                                                                                                       
)
 }
4

3 回答 3

1

不知道你是否还需要答案,但想通了!Coldfusion 返回的 Json 确实是一个 NSArray。仅此而已,仅对 Parse 很复杂

关键是将列名与值匹配...

完全希望这会有所帮助。

//在这里写函数 - (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;

}

/ * ** * ** * ** * ** * ** * ** * ** * ** * ** * ** * ** * ** * ** * ** * * 私有实现部分 ** ** * ** * ** * ** * ** * ** * ** * ** * ** * ** * ** * ** * *** ** /

语用标记 -

杂注标记私有方法

/*------------------------------------------------ ------------- * ------------------------------------ ------------------------ / - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { // 将传入的数据存入一个字符串 NSString *jsonString = [[NSString alloc] initWithData:data encoding: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

}

}

是的...这是格罗夫

于 2012-03-14T01:57:25.360 回答
0

使用像https://github.com/TouchCode/TouchJSON这样的库

然后从您的冷融合服务器获取数据后,执行以下操作;

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

这将为您提供包含 json 对象的字典。

有一些方法可以使用 CJSONSerializer 去另一个方向

于 2011-09-02T16:19:50.250 回答
0
NSArray *array = [resultsDictionary objectForKey:@"DATA"];
NSLog(@"array : %@", array);

“DATA”条目是“对象”,而不是数组。如果您查看记录的内容,您会发现它正在记录字典。

JSON“对象”以“{”开头,而数组以“[”开头。

于 2011-09-02T17:59:09.560 回答