Objc live Json Parsing Only 显示 1 项错误

Posted

技术标签:

【中文标题】Objc live Json Parsing Only 显示 1 项错误【英文标题】:Objc live Json Parsing Only shows 1 item error 【发布时间】:2015-11-18 09:22:07 【问题描述】:

我有工作 objc tableview 解析代码和实时条目。但显示仅匹配 1 行。我想显示所有匹配的行。我的工作代码在这里。

我的远程 json 文件


   "company" : [
        
         "description" : "example company , Jordan",
         "id" : "90",
         "place_id" : "90"
       
         "description" : "example company 2 , Qatar",
         "id" : "362578",
         "place_id" : "362578"
       
         "description" : "example company 3 , Spain",
         "id" : "432589",
         "place_id" : "432589"
      ,    
    
         "description" : " ",
         "id" : "1",      
         "place_id" : "1"
      
   ],
   "status" : "OK"

Objc 代码在这里

#import "ViewController.h"
#import "Common/Constants.h"
#import "Place.h"

@interface ViewController ()
    NSMutableArray *response;
    Place *place;
    NSMutableArray *places;

@end


NSString *links;

@implementation ViewController
@synthesize toggleSwitch;

- (void)viewDidLoad 
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
//    [self.txtSearchField becomeFirstResponder];
    self.tableViewSearchResult.hidden = YES;

     self.toggleSwitch.on = true;


        self.switchLabel.text = @"Coms";

        NSString *valueToSave = @"http://bla.com/company.php?";
        [[NSUserDefaults standardUserDefaults] setObject:valueToSave forKey:@"preferenceName"];
        [[NSUserDefaults standardUserDefaults] synchronize];







- (IBAction)backChange:(id)sender 
    if ([sender isOn] == YES) 
        _switchLabel.text = @"Firmalar";



        NSString *valueToSave = @"http://bla.com/company.php?";
        [[NSUserDefaults standardUserDefaults] setObject:valueToSave forKey:@"preferenceName"];
        [[NSUserDefaults standardUserDefaults] synchronize];


        NSLog(@"");


     else 


        NSString *valueToSave = @"http://bla.com/company2.php?";
        [[NSUserDefaults standardUserDefaults] setObject:valueToSave forKey:@"preferenceName"];
        [[NSUserDefaults standardUserDefaults] synchronize];


  _switchLabel.text = @"Ülkeler";


        NSLog(@"");


          












#pragma mark - 
-(void)searchForResult:(NSString *)input


    NSString *savedValue = [[NSUserDefaults standardUserDefaults]
                            stringForKey:@"preferenceName"];


     NSString *urlString = [NSString stringWithFormat:@"%@gelen=%@",savedValue,input];

      NSLog(@"link = %@",urlString);

    NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:urlString]];




#pragma mark - UITextField Delgate
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string

    if (![string isEqualToString:@""] && [string length]>0) 
        NSString *keyword = [textField.text stringByAppendingString:string];
        NSLog(@"String : %@",keyword);
        if ([keyword length]>=4) 
            [self searchForResult:keyword];
        
    
    return YES;

#pragma mark - UITableViewDelegate 

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
    place = [places objectAtIndex:indexPath.row];
    self.txtSearchField.text = place.placeName;
    NSLog(@"Selected placeID : %@",place.placeID);
    self.tableViewSearchResult.hidden = YES;


#pragma mark - UITableViewDataSource

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];

    if (nil == cell) 
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
                                      reuseIdentifier:@"cell"];
    
    place = [places objectAtIndex:indexPath.row];
    NSLog(@"Place ID : %@, Place Name : %@",place.placeID,place.placeName);
    cell.textLabel.text = [place placeName];
    return cell;

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
    return [places count];


- (void)didReceiveMemoryWarning 
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.


@end

当再匹配 1 个时给我这个错误(如果匹配 1 个成功显示)

Connection Error : (null)

我工作了大约 7-8 小时,但我没有解决它 :) 我需要您的帮助,感谢您所做的一切。我认为这是一个简单的问题,但我仍然没有解决它。

【问题讨论】:

公司对象之间缺少逗号。 我猜会话超时 @Fabio Berger 哪些?但显示匹配的 1 项成功 @PK20 老兄我能做什么? @SwiftDeveloper 你的 json 应该有像这里这样的逗号: "description" : "example company , Jordan", "id" : "90", "place_id" : "90" , "description" : "example company 2 , Qatar", "id" : "362578", "place_id" : "362578" , "description" : "example company 3 , Spain", "id" : "432589", "place_id" : "432589" 【参考方案1】:

你的json字符串应该是这样的


   "company" : [
        
         "description" : "example company , Jordan",
         "id" : "90",
         "place_id" : "90"
      , 
         "description" : "example company 2 , Qatar",
         "id" : "362578",
         "place_id" : "362578"
      , 
         "description" : "example company 3 , Spain",
         "id" : "432589",
         "place_id" : "432589"
      ,    
    
         "description" : " ",
         "id" : "1",      
         "place_id" : "1"
      
   ],
   "status" : "OK"

满足您的代码并获得超过 1 个记录。

根据 RFC 4627(JSON 规范),它是一个有效的 josn。因此,您收到了 1 条回复。

【讨论】:

以上是关于Objc live Json Parsing Only 显示 1 项错误的主要内容,如果未能解决你的问题,请参考以下文章

——解析 json 日志

Android Retrofit Json Parsing(部分json动态)

Unexpected end of JSON input while parsing near

Swift3 Json Parsing - 如何访问相关字段

[android] init进程 .rc文件中serviceaction的parsing

NPM 解决Unexpected end of JSON input while parsing near 问题