【问题标题】:Is there a way to parse serializeJSON file in objective C有没有办法在目标 C 中解析 serializeJSON 文件
【发布时间】:2011-09-02 16:05:42
【问题描述】:

我正在尝试解析从 ColdFusion 服务器生成的 SerializeJSON 格式的 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"                                                                                                                                                                                                                                       
)
 }

【问题讨论】:

  • 请注意,您的 JSON 无效。 “CLASS_END”后面不能有逗号。
  • 抱歉错误。但是我的 JSON 是有效的并且工作正常!!
  • 发布NSLog(@"%@", [resultsDictionary description]);的结果
  • 所以你没有向我们展示真正的 JSON 数据?
  • 啊,你用最新的编辑消除了“数组”。您是在编辑代码,还是只是不向我们展示您正在使用的代码?

标签: iphone objective-c json sbjson


【解决方案1】:

不知道你是否还需要答案,但已经想通了! Coldfusion 返回的 Json 确实是一个 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;

}

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

pragma mark -

pragma mark 私有方法

/*-------------------------------------------- ---------------- * ---------------------------------------------- -------------/ - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { // 将传入的数据存储到字符串中 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

}

}

是的......这是格罗夫

【讨论】:

    【解决方案2】:
    NSArray *array = [resultsDictionary objectForKey:@"DATA"];
    NSLog(@"array : %@", array);
    

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

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

    【讨论】:

    • 查看"array"的NSLog的结果。如果您的 JSON 已成功解析,并且它确实类似于您在上面显示的内容。 NSLog 输出将显示“array”是一个 NSDictionary。 (如果它显示了不同的东西,你就没有告诉我们关于某事的真相。)
    【解决方案3】:

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

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

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

    这会给你一个包含 json 对象的字典。

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

    【讨论】:

    • SBJSON 的工作方式是否相同,因为我试过了,我没有得到任何东西作为 NSDictionary。
    • 我不会说 SBJSON 我没用过。您可以发布您用来尝试取回某些东西的代码吗?你确定你在你的 NSData 对象中得到了一些东西吗?您可以通过添加以下几行来检查它以确保您将来自网络调用的数据返回到名为 data 的 NSData 中。 NSString *jsonString = [[NSString alloc] initWithData:数据编码:NSUTF8StringEncoding]; NSLog(@"jsonString: %@", jsonString); [jsonString 发布];然后看看记录了什么。
    • 我已经用我收到的错误编辑了我上面的问题。
    猜你喜欢
    • 1970-01-01
    • 2023-02-03
    • 2018-09-29
    • 1970-01-01
    • 2020-11-01
    • 1970-01-01
    • 2021-10-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多