在实际的设备上的iOS JSON麻烦

出于某种原因,这可以在运行iOS 6+的模拟器上运行,但不能运行在运行iOS 5+的实际iPad上。 当我在iPad上运行我的应用程序,它给了我这个错误(和其他人)。

Error parsing JSON: Error Domain=NSCocoaErrorDomain Code=3840 "The operation couldn't be completed. (Cocoa error 3840.)" (Badly formed object around character 316.) UserInfo=0x650260 {NSDebugDescription=Badly formed object around character 316.} JSON used is this (which is passed from Javascript): {"functionname":"setItem","args":{"key":"http://localhost:3000/assets/tasks/task.js","value":"function Task(){this.steps=new Array,this.completed=!1,this.loaded=!1,this.stepCount=-1,this.points=0,this.newpoints=0,this.prevpoints=0,this.circleGesture=!1,this.customGesture=!1,this.subtaskCounter=0,this.className=/"/"}(goes on for a while since it is a js script)"}} 

在iOS中将jsonstring转换为json的代码

 if ([[urlStr lowercaseString] hasPrefix:protocolPrefix]) { //strip protocol from the URL. We will get input to call a native method urlStr = [urlStr substringFromIndex:protocolPrefix.length]; //Decode the url string urlStr = [urlStr stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; NSError *jsonError; //parse JSON input in the URL NSDictionary *callInfo = [NSJSONSerialization JSONObjectWithData:[urlStr dataUsingEncoding:NSUTF8StringEncoding] options:0 error:&jsonError]; //check if there was error in parsing JSON input if (jsonError != nil) { NSLog(@"Error parsing JSON: %@",[jsonError debugDescription]); NSLog(@"%@", urlStr); return NO; } .... } 

CoffeeScript的

 callNativeFunction: (func, args, callback)-> if global_phone_os == 'ios' url = "js2native://" callInfo = {} callInfo.functionname = func if args? callInfo.args = args if callback? cid = Math.random().toString(36).substr(2,10) @callback[cid] = callback callInfo.callback_id = cid url += JSON.stringify callInfo @openCustomURLinIFrame url 

任何想法如何让这个模拟器和实际设备上工作?

UPDATE

到目前为止,我认为我已经解决了。 如果我这样做,这将被标记为答案。 我不得不在coffeescript中做以下事情:

 url += encodeURIComponent JSON.stringify callInfo 

这有所作为。

谢谢。

它看起来像你正在尝试parsingURLstring,而不是parsingURL的内容。 你确定这在模拟器中工作吗?

你的代码:

 //parse JSON input in the URL NSDictionary *callInfo = [NSJSONSerialization JSONObjectWithData:[urlStr dataUsingEncoding:NSUTF8StringEncoding] options:0 error:&jsonError]; 

我认为应该是:

 //parse JSON input in the URL NSDictionary *callInfo = [NSJSONSerialization JSONObjectWithData:[NSData dataWithContentsOfURL: urlStr], options:0 error:&jsonError]; 

这确实解决了这个问题。

 url += encodeURIComponent JSON.stringify callInfo