【问题标题】:How to extract Data from url request in iOS如何从 iOS 中的 url 请求中提取数据
【发布时间】:2016-01-19 00:59:17
【问题描述】:

我正在编写一个应用程序来扫描条形码,然后查询 Outpan.com 以便从条形码编号中获取信息。 如何从 url 请求中提取信息? 下面是成功扫描后的输出示例。 例如,如何将名称存储到 NSString 中?

这是我用来访问信息的代码。

- (void) sendRequest {


NSString *myString = @"https://api.outpan.com/v2/products/";

NSString *secondhalf= _barcode;


NSString *thirdHalf = @"?apikey=935b8b8e102f93220b751a4e1c66126a";

NSString *test = [myString stringByAppendingString:secondhalf];
NSString *text = [test stringByAppendingString:thirdHalf];

if (![text isEqualToString:@""]) {

    NSURL *url = [NSURL URLWithString:text];
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    [self.webView loadRequest:request];

}

}

通常我会尝试使用类似的东西

   NSString* value = [webView stringByEvaluatingJavaScriptFromString:@"document.getElementById('myId').value"];

如果 html 看起来像这样

<html>
  <body>
      <input id="myId" type="text" value="TextValue"/>
  </body>
</html>

但是html是这样的

<html><head></head><body><pre style="word-wrap: break-word; white-space: pre-    wrap;">{
    "gtin": "0014633156720",
    "outpan_url": "https:\/\/www.outpan.com\/view_product.php?    barcode=0014633156720",
    "name": "Battlefield: Bad Company 2",
    "attributes": {
        "Distribution Media\/Method": "Blu-ray Disc",
        "ESRB Rating": "RP (Rating Pending)",
        "Manufacturer": "Electronic Arts",
        "Manufacturer Part Number": "15672",
        "Platform": "PlayStation 3",
        "Platform Supported": "PlayStation 3",
        "Software Main Type": "Game",
        "Software Sub Type": "First Person Shooter"
    },
    "images": [],
    "videos": [],
    "categories": []
}</pre></body></html>

【问题讨论】:

    标签: ios objective-c barcode


    【解决方案1】:

    问题是您正在尝试使用 UIWebView 发出 api 请求。 api 可能会将您的 Accepts 标头视为 text/html,因此会在网页中向您发送 api 响应,而不仅仅是原始 JSON。尝试使用 NSURLSession 发出请求。

    - (void)sendRequest:(id)sender {
    
        NSURLSessionConfiguration *sessionConfig = [NSURLSessionConfiguration defaultSessionConfiguration];
    
        NSURLSession *session = [NSURLSession sessionWithConfiguration:sessionConfig delegate:nil delegateQueue:nil];
    
        NSString *urlString = [NSString stringWithFormat: @"https://api.outpan.com/v2/products/%@", _barcode];
    
        NSURL *url = [NSURL URLWithString: urlString];
    
        NSURLComponents *components = [[NSURLComponents alloc] initWithURL: url resolvingAgainstBaseURL: NO];
    
        NSURLQueryItem *query = [[NSURLQueryItem alloc] initWithName: @"apikey" value: @"935b8b8e102f93220b751a4e1c66126a"];
    
        components.queryItems = @[query];
    
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL: components.URL];
    
        request.HTTPMethod = @"GET";
    
        NSURLSessionDataTask* task = [session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
    
            if (error == nil) {
    
                NSDictionary *responseBody = [NSJSONSerialization JSONObjectWithData: data options: 0 error: nil];
    
                NSLog(@"got response: %@", responseBody);
    
            } else {
                // Failure
                NSLog(@"URL Session Task Failed: %@", [error localizedDescription]);
            }
        }];
    
        [task resume];
    }
    

    未测试,因为我没有真正的条形码,但您应该在 responseBody 字典中看到您请求的 JSON。

    【讨论】:

    • 代码成功获取输出,我现在如何从响应体中提取数据?
    • 忽略之前的评论完全忘记了我可以使用 NSString *str=[responseBody objectForKey:@"name"];
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-12
    • 2015-03-20
    • 1970-01-01
    相关资源
    最近更新 更多