如何将包含 JSON 的 JSON NSString 从 Objective C 方法传递给 Javascript 方法
Posted
技术标签:
【中文标题】如何将包含 JSON 的 JSON NSString 从 Objective C 方法传递给 Javascript 方法【英文标题】:How to Pass JSON NSString containing JSON to a Javascript Method from an Objective C method 【发布时间】:2013-01-07 14:53:41 【问题描述】:我有一个要求,objective C code should
使用 WebService
并且在 JSON format
中收到的响应必须作为参数传递给 javascript
方法以进行进一步处理。我正在使用 UIWebView
这将处理后显示相应的结果JSON response.
当我尝试将 JSON 字符串传递给 Javascript
方法时出现问题。Javascript 方法不简单地接受输入。
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
[UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
NSString *responseString = [[NSString alloc] initWithBytes:[resultData bytes] length:[resultData length] encoding:NSUTF8StringEncoding];
NSLog(@"%@",responseString);
[self returnResponseToJavaScriptMethods:responseString];
-(void)returnResponseToJavaScriptMethods:(NSString*)theResponse
[viewMainWebView stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"retrieveServerResponse('%@')",theResponse]];
我有什么遗漏的吗?使用相同的方法可以正确传递简单的字符串。
更新:
将responseData
编码为UTF8StringEncoding
就可以了。
[theResponse stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding]
【问题讨论】:
【参考方案1】:您可能需要在将 JSON 字符串发布到 javascript 之前对其进行 URL 转义。
尝试改变:
-(void)returnResponseToJavaScriptMethods:(NSString*)theResponse
[viewMainWebView stringByEvaluatingJavaScriptFromString:
[NSString stringWithFormat:@"retrieveServerResponse('%@')",theResponse]];
到
-(void)returnResponseToJavaScriptMethods:(NSString*)theResponse
[viewMainWebView stringByEvaluatingJavaScriptFromString:
[NSString stringWithFormat:@"retrieveServerResponse('%@')",
[theResponse stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]];
看看这是否对你有帮助。但是请注意,有更好(或更可靠)的方法来转义字符串,例如在此答案中给出的方法:How do I URL encode a string
【讨论】:
非常感谢您的建议。它就像一个魅力。但是现在我们用转义字符填充的字符串需要清理以转换为正确的 JSON 响应。这给了我另一个头痛。如果您知道一种在 javascript 中完美反转编码的方法,请在 cmets 中提及。 我不知道它是否“完美”,但是您尝试过unescape()
功能吗?它应该可以工作,只是unescape(your_escaped_json_string)
我改变了我的编码方法。我只是使用 Base64 编码对其进行编码/解码。【参考方案2】:
在 javascript 中不需要 retrieveServerResponse()
,只需在 ios 中对字符串进行百分比转义后使用 unescape(percentEscapedStringFromiOS)
NSString *encodedString = [string stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
// CAVEAT: unescape(\"%@\") is important since "'" (single quote) isn't excaped by the above function!
NSString *jsString = [NSString stringWithFormat:@"myJSstring = unescape(\"%@\")", encodedString]];
NSString *jsResult = [self.webView stringByEvaluatingJavaScriptFromString:jsString];
【讨论】:
以上是关于如何将包含 JSON 的 JSON NSString 从 Objective C 方法传递给 Javascript 方法的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Newtonsoft.Json 将包含数组数组的 json 对象解析为 C# 中的对象列表?
如何将包含逗号分隔的 json 值的单个字符串转换为单个 json 对象?
如何将包含 JSON 的 JSON NSString 从 Objective C 方法传递给 Javascript 方法
如何将包含 JSON 的输入 CSV 数据转换为 spark 数据集?