你好,
即使我做了研究,我发现在我的情况下也无法帮助我。
所以,我尝试解析在xcode上由php脚本创建的Json,但是我有一个阻止该过程的错误。
我是新手,所以我尽力为我的问题布局做好准备......
我的错误:
[376:70b] Error Domain=NSCocoaErrorDomain Code=3840 "The operation couldn’t be completed. (Cocoa error 3840.)" (Garbage at end.) UserInfo=0x8bc0f70 {NSDebugDescription=Garbage at end.
我的代码:
NSData *jsonSource = [NSData dataWithContentsOfURL:
[NSURL URLWithString:@"http://codlobbyz.com/app/service.php"]];
NSError *err;
id jsonObjects = [NSJSONSerialization JSONObjectWithData:
jsonSource options:NSJSONReadingMutableContainers error:&err];
NSLog(@"%@", err);
我的json:
[{"nom":"Call of duty ghost","date":"22 novembre","image":"appicon.png"},{"nom":"Fifa 14","date":"22 novembre","image":"appicon.png"}]
我希望你能帮助我,谢谢你的答案。
答案 0 :(得分:12)
PHP脚本返回JSON,但也是一小段跟随它的HTML:
[{"nom":"Call of duty ghost","date":"22 novembre","image":"appicon.png"},{"nom":"Fifa 14","date":"22 novembre","image":"appicon.png"}]
<!-- Hosting24 Analytics Code -->
<script type="text/javascript" src="http://stats.hosting24.com/count.php"></script>
<!-- End Of Analytics Code -->
您可以通过命令行使用curl来查看:
curl http://codlobbyz.com/app/service.php
或者在浏览器中加载并查看来源。
如果您可以控制PHP脚本,请删除分析代码。否则,您可以在解析之前使用正则表达式删除响应的非JSON部分。
编辑:要使用正则表达式远程处理非JSON,这样的东西可以工作:
NSString *json = @"[{\"nom\":\"Call of duty ghost\",\"date\":\"22 novembre\",\"image\":\"appicon.png\"},{\"nom\":\"Fifa 14\",\"date\":\"22 novembre\",\"image\":\"appicon.png\"}]\n<!-- Hosting24 Analytics Code -->\n<script type=\"text/javascript\" src=\"http://stats.hosting24.com/count.php\"></script>\n<!-- End Of Analytics Code -->";
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"\\s+<!--.*$"
options:NSRegularExpressionDotMatchesLineSeparators
error:nil];
NSTextCheckingResult *result = [regex firstMatchInString:json
options:0
range:NSMakeRange(0, json.length)];
if(result) {
NSRange range = [result rangeAtIndex:0];
json = [json stringByReplacingCharactersInRange:range withString:@""];
NSLog(@"json: %@", json);
}
答案 1 :(得分:0)
如果您查看原始数据,您会发现&#39; 0&#39; 0在里面删除它我用了以下的循环
NSData *objectData = [jsonStr dataUsingEncoding:NSUTF8StringEncoding];
NSError *error;
id json = [NSJSONSerialization JSONObjectWithData:objectData options:NSJSONReadingMutableContainers error:&error];
if (json == nil) {
int index = 0;
const char *bytes = [data bytes];
for (int i = (int)data.length-1; i > 0; i--) {
unsigned char ch = (unsigned char)bytes[i];
NSLog(@"%02hhx", ch);
if (ch != 0) {
index = i+1;
break;
}
}
NSRange dataRange = NSMakeRange(0, index);
json = [NSJSONSerialization JSONObjectWithData:[objectData subdataWithRange:dataRange] options:NSJSONReadingMutableContainers error:&error];
}
这会切断所有&#39; 00&#39;来自数据末尾的字节。