带有对象和键的 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 文件键的类型定义