如何在ios中构建所需的JSON格式?

时间:2015-12-30 12:05:11

标签: ios json

这是我的json回复:

{
"projects": [
{
"id": 8,
"name": "Andriod APP",
"identifier": "andriod-app",
"description": "",
"status": 1,
"is_public": true,
"created_on": "2015-06-29T11:54:23Z",
"updated_on": "2015-06-29T11:54:23Z"
},
],
"total_count": 8,
"offset": 0,
"limit": 25
}

1.我创建了下拉列表并仅在下拉列表中显示项目名称(要求)。

2.在表格视图中选择项目名称也必须得到项目ID。通过这段代码来实现:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{

projdict  = [[NSMutableDictionary alloc]init];
[projdict setObject:[self.itemArray objectAtIndex:indexPath.row] forKey:@"data"];

数据内容为:

{
data ={
"created_on" = "2015-06-24T11:01:11Z";
description = "";
id = 3;
identifier = fotonation;
"is_public" = 1;
name = Fotonation;
status = 1;
"updated_on" = "2015-06-24T11:01:11Z";
};
}

从这个回复中我得到了所选项目名称的项目ID。

projid = [[projdict objectForKey:@"data"] objectForKey:@"id"];

然后我创建了字典:

 proj_id = @"id";
 proj_name = @"name";
 test = [NSDictionary dictionaryWithObjectsAndKeys:projid,proj_id, projname,proj_name, nil];

我希望得到json格式:

{
“project”:{
“id”:”3”,
”name”:”fotonation
}

因为我这样做了:

NSDictionary * test1 = [[NSDictionary alloc] initWithObjectsAndKeys:@"Project",test, nil];

test1的响应是:

{
{
id = 3;
name = Fotonation;
} = Project;
}

NSError * error;
NSData * data = [NSJSONSerialization dataWithJSONObject:test1 options:NSJSONWritingPrettyPrinted error:&error];

关于这个我在nsdata上收到错误它显示错误:

json字典中的无效(非字符串)键。

3.我保留了didrowselect中的所有值是否可以将值传递给任何其他方法或全局?

4.在ios中有任何关于JSON格式和Json请求的文章或教程吗?

2 个答案:

答案 0 :(得分:0)

在我看来,initWithObjectsAndKeys打电话给你的对象和按键已被颠倒了:

NSDictionary *test1 = 
  [[NSDictionary alloc] initWithObjectsAndKeys:
    @"Project",test, nil];

在方法initWithObjectsAndKeys中,首先是对象,然后是密钥,这会让人感到困惑。

你传递@“Project”作为对象,test(字典)作为键。

如果您打算使用方法initWithObjectsAndKeys,那么您需要

NSDictionary *test1 = 
  [[NSDictionary alloc] initWithObjectsAndKeys:
   test, @"Project", nil];

但是,我建议使用现代对象文字语法,如下所示:

NSDictionary *test1 = @{@"project": test};

它更紧凑,更易于阅读。

答案 1 :(得分:0)

试试这个

    NSDictionary * test1 = @{@"projects": @[@{@"id": @8,
                                          @"name": @"Andriod APP",
                                          @"identifier": @"andriod-app",
                                          @"description": @"",
                                          @"status": @1,
                                          @"is_public": @1,
                                          @"created_on": @"2015-06-29T11:54:23Z",
                                          @"updated_on": @"2015-06-29T11:54:23Z"

                                          }],
                         @"total_count": @8,
                         @"offset": @0,
                         @"limit": @25
                         };
NSError *error = nil;
NSData * data = [NSJSONSerialization dataWithJSONObject:test1 options:NSJSONWritingPrettyPrinted error:&error];