0

我正在尝试使用 google currency rest api 来获取 USD->GBP 转换结果。像这样-> http://www.google.com/ig/calculator?hl=en&q=100USD=?GBP

json 的响应是:
{lhs: "100 美元",rhs: "62.9802242 英镑",error: "",icc: true}

所以我试图从存储到 2 个字符串中的“lhs”“rhs”中获取值

这是我获取转换结果数据的方法:

@implementation ConvertorBrain

-(id)initWithFromCurrency:(NSString *)fromCurrency
               toCurrency:(NSString *)toCurrency
               withAmount:(int)amount
{
    if (self=[super init]) {
        self.fromCurrency = fromCurrency;
        self.toCurrency = toCurrency;
        self.amount = amount;
    }
    return self;
}

-(void)getConvertResult
{
    NSString *encodeFromCurrencyTerm = [self.fromCurrency stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
    NSString *encodeToCurrencyTerm = [self.toCurrency stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

    NSString *searchLocation = [NSString stringWithFormat:@"http://www.google.com/ig/calculator?hl=en&q=%d%@=?%@", self.amount, encodeFromCurrencyTerm, encodeToCurrencyTerm];
    NSURL *convertedResults = [NSURL URLWithString:searchLocation];

    NSData *JSONData = [[NSData alloc] initWithContentsOfURL:convertedResults];
    if ([JSONData length] > 0) {
        NSError *error = nil;
        NSDictionary *dictoionary = [NSJSONSerialization JSONObjectWithData:JSONData options:0 error:&error];
        if (!dictoionary) {
            NSLog(@"Json parsing failed: %@", error);
        }

        self.lhs = [dictoionary valueForKey:@"lhs"];
        self.rhs = [dictoionary valueForKey:@"rhs"];

    } else {
        [[[UIAlertView alloc] initWithTitle:@"Service Error" message:@"Cannot complete your request at this time, please try later" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil] show];
    }
}

然后我在其他地方像这样调用方法:

self.brain = [[ConvertorBrain alloc] initWithFromCurrency:@"USD" toCurrency:@"GBP" withAmount:100];
[self.brain getConvertResult];

那么我预期的 lhs 和 rhs 结果应该是 lhs="100 美元" rhs="62.9802242 英镑"

但是,如果我运行代码,它会抛出这些错误:错误域 = NSCocoaErrorDomain 代码 = 3840“操作无法完成。(可可错误 3840。)”(在字符 1 周围的对象中没有值的字符串键。 ) UserInfo=0x7172860 {NSDebugDescription=对象中字符 1 周围的值没有字符串键。}

我无法弄清楚出了什么问题..需要帮助,另外,我尝试对其进行调试。似乎这条线出了问题,以某种方式获取任何数据->NSData *JSONData = [[NSData alloc] initWithContentsOfURL:convertedResults];

4

2 回答 2

1

您的 URL 看起来格式不正确。例如: http ://www.google.com/ig/calculator?hl=en&q=50USD=?GBP

在一个可以正常工作的浏览器中,因为浏览器会自动处理特殊字符,但是呢?最后是无效的。

尝试使用此 URL。确保通过在字符串后面加上另一个 % 来转义字符串中的 %。 http://www.google.com/ig/calculator?hl=en&q=50USD=%3FGBP

这里有一些其他的字符编码:http ://www.w3schools.com/tags/ref_urlencode.asp

于 2013-09-14T17:03:57.520 回答
0

您的 json 格式可能不正确。使用它来检查您的 json 格式是否正确。http://jsonlint.com/

于 2015-07-14T00:32:55.523 回答