Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 如何使用正则表达式从JSON数据中提取元素的值_Iphone_Ios_Regex - Fatal编程技术网

Iphone 如何使用正则表达式从JSON数据中提取元素的值

Iphone 如何使用正则表达式从JSON数据中提取元素的值,iphone,ios,regex,Iphone,Ios,Regex,我试图使用以下方法从JSON数据中提取“points”元素的值 NSString* encodedPoints = [apiResponse stringByMatching:@"points:\\\"([^\\\"]*)\\\"" capture:1L]; 但是JSON数据中有不止一个“points”元素。请帮助我,我对正则表达式不太了解。 我是从获取JSON数据的,您应该使用JSON解析器来处理JSON,因为这比使用易于失败的正则表达式更正确。您应该使用JSON解析器来处理JSON

我试图使用以下方法从JSON数据中提取“points”元素的值

    NSString* encodedPoints = [apiResponse stringByMatching:@"points:\\\"([^\\\"]*)\\\"" capture:1L];
但是JSON数据中有不止一个“points”元素。请帮助我,我对正则表达式不太了解。
我是从

获取JSON数据的,您应该使用JSON解析器来处理JSON,因为这比使用易于失败的正则表达式更正确。

您应该使用JSON解析器来处理JSON,因为这比使用易于失败的正则表达式更正确。

您应该使用JSON扫描程序

确保JSON位于
NSString
中,而不是
NSData

下面是一个使用
NSScanner
而不是正则表达式的方法:

NSMutableArray *pointList = [NSMutableArray array];
NSString *pointsString;
BOOL success = YES;
NSScanner *scanner = [NSScanner scannerWithString:encodedPoints];

while (YES) {
    success = [scanner scanUpToString:@"points:\"" intoString:nil];
    success = [scanner scanString:@"points:\"" intoString:nil];
    if (success == NO)
        break;
    success = [scanner scanUpToString:@"\"" intoString:&pointsString];
    [pointList addObject:pointsString];
}

// Show results by print lengths of the found points
for (NSString *point in pointList)
    NSLog(@"point length: %i", point.length);
NSLog输出:

point length: 22058
point length: 8889

您应该使用JSON扫描程序

确保JSON位于
NSString
中,而不是
NSData

下面是一个使用
NSScanner
而不是正则表达式的方法:

NSMutableArray *pointList = [NSMutableArray array];
NSString *pointsString;
BOOL success = YES;
NSScanner *scanner = [NSScanner scannerWithString:encodedPoints];

while (YES) {
    success = [scanner scanUpToString:@"points:\"" intoString:nil];
    success = [scanner scanString:@"points:\"" intoString:nil];
    if (success == NO)
        break;
    success = [scanner scanUpToString:@"\"" intoString:&pointsString];
    [pointList addObject:pointsString];
}

// Show results by print lengths of the found points
for (NSString *point in pointList)
    NSLog(@"point length: %i", point.length);
NSLog输出:

point length: 22058
point length: 8889

我不确定你是否可以使用mapkit显示方向,因为这违反了谷歌的法律条款。请向某人确认。但这就是我们使用api所做的。是吗?我不确定你是否可以使用mapkit显示方向,因为这违反了谷歌的法律条款。请向某人确认。但这就是我们使用api所做的。对??JSON解析器不工作是因为它给出了无效的JSON响应。这取决于您使用的JSON解析器及其失败的位置。在我以前的眼里,JSON看起来不错。我看到了另一个线程。看起来他们不是生成JSON作为JSON使用,而是在Javascript中设置一些变量。您可以使用下面的内容使之正确。JSON.jsonlint.com让我知道哪里出了问题。几个正则表达式就能解决这个问题。第一个问题是JSON对象中的键。它可以由(\w\+)(\:)/“\1”\2/cg正则表达式修复。第二个问题是第一个值没有转义某些字符。除此之外,JSON是正确的。JSON解析器不能工作,因为它给出了无效的JSON响应。这取决于您使用的JSON解析器以及它失败的位置。在我以前的眼里,JSON看起来不错。我看到了另一个线程。看起来他们不是生成JSON作为JSON使用,而是在Javascript中设置一些变量。您可以使用下面的内容使之正确。JSON.jsonlint.com让我知道哪里出了问题。几个正则表达式就能解决这个问题。第一个问题是JSON对象中的键。它可以由(\w\+)(\:)/“\1”\2/cg正则表达式修复。第二个问题是第一个值没有转义某些字符。除此之外,JSON是正确的。