带有对象和键的 UIPicker 使用 JSON

Posted

技术标签:

【中文标题】带有对象和键的 UIPicker 使用 JSON【英文标题】:UIPicker with object and keys using JSON 【发布时间】:2013-02-20 00:38:37 【问题描述】:

我有点卡在 UIpicker 上。这是我的 JSON 数据:


    "contact_id": [
        "455",
        "464"
    ],
    "contact_name": [
        "Administrator",
        "Main contact"
    ]

我将数据存储到一个 NSdictionary 中,然后在转换为对象后,我创建了一个 NSarray 来存储联系人。在我的 Viewcontroller.m 我有:

// Creating an URL object
NSURL *url = [NSURL URLWithString:@"http://web.com/json.php"];    
//Creating the data object that will hold the content of the URL
NSData *jsonData = [NSData dataWithContentsOfURL:url];
NSError *error = nil;
NSDictionary *result = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:&error];
contactlist = [result objectForKey:@"contact_name"];

我可以使用联系人列表在下拉列表中显示联系人值。这是我的其他代表

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
         return 1;


// returns the # of rows in each component..
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
        return [contactlist count];


-(NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
         return [contactlist objectAtIndex:row];


- (void)pickerView:(UIPickerView *)pickerView
      didSelectRow:(NSInteger)row
       inComponent:(NSInteger)component
contactTextField.text = (NSString *)[contactlist objectAtIndex:row];

我想向所选联系人的相应 ID 发送 JSON 发布请求。

例如,如果您选择contact_name Administrator,我想获取其contact_id 455 我创建了一个方法

- (IBAction)SendMessage:(id)sender ;

在将 JSON 数据发送到我的服务器端脚本之前创建它,这是我需要传递 id 而不是联系人姓名的地方

// NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:@"603",  @"contact",nil];

我创建了这个数组试图解决这个问题,但无法让它工作。

contactid = [result objectForKey:@"contact_id"];

【问题讨论】:

我不清楚你想在这里实现什么? “我想在我的 JSON 帖子请求中发送所选联系人的相应 ID”是什么意思。您可能有一个您想要实现 JSON 正文示例的示例? 我刚刚编辑了我的帖子 我仍然不清楚您是否无法正确格式化 JSON 或从方法获取 contact_id - (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:( NSInteger)component contactTextField.text = (NSString *)[contactlist objectAtIndex:row]; ? 很清楚:我得到了 JSON 并且它是有效的。我可以使用contact_name 值填充选择器。现在我需要获取contact_ID,因为这就是我的服务器所关心的 【参考方案1】:

好吧,我想我知道你的问题。可能有几种解决方案。但我会通过一个刚刚进入我的人。

如果id的数组和名字的顺序相同就新建一个数组

NSDictionary *result = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:&error];

NSArray* ids = (NSArray*)[result objectForKey:@"contact_id"];

然后在方法中:

- (void)pickerView:(UIPickerView *)pickerView
      didSelectRow:(NSInteger)row
       inComponent:(NSInteger)component

执行以下操作获取对应的id:

NSString *idSentToServer = (NSString *)[ids objectAtIndex:row];

【讨论】:

【参考方案2】:

我确实理解在您的案例中定义 JSON 的方式可能是这样的。 您的 JSON 数据是否应该返回 JSON 对象数组?

如下:

["contact_id":"455","contact_name":"Administrator","contact_id":"464","contact_name":"Main contact"]

【讨论】:

你在问我问题吗?或者你建议我重新格式化我的 JSON? 无论如何你的 json 是有效的,它会向我解释一个具有 id 集合和名称集合的对象。 我也愿意接受建议,您认为您的格式更易于使用吗? 抱歉太忙了,不在。是的,我认为如果 json 被格式化为带有两个对象的 json 数组,那么您发布的原始代码可能会起作用,这两个对象在我的 cmets 中提供

以上是关于带有对象和键的 UIPicker 使用 JSON的主要内容,如果未能解决你的问题,请参考以下文章

如何按值和键的多个条件对嵌套字典进行排序?

使用 TypeScript 对带有前缀的 JSON 文件键的类型定义

Groovy 比较两个带有未知节点名称和值的 json

带有响应方法调用的键的 Rails json

Rails 无法正确解码来自 jQuery 的 JSON(数组变成带有整数键的散列)

如何在javascript中完全获取带有重复键的JSON