我是开发和stackoverflow的新手,请帮助我.我正在尝试做一个简单的应用程序,其中YQL链接用于获取本地数据并以表格格式显示它.为此我将数据转换为字典,稍后我想将其发送到表中.但是当我试图将数据转换为Dictionary时,它表示null.请帮我.检查下面的截图.提前致谢.
NSString *str = @"https://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20local.search%20where%20zip%3D'94085'%20and%20query%3D'pizza'&diagnostics=true";
Run Code Online (Sandbox Code Playgroud)
在这里我把json查询变成了一个字符串(*str)
NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:str]];
// NSString *stringFromData = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
// NSLog(@"%@", stringFromData);
Run Code Online (Sandbox Code Playgroud)
当我试图实现这个注释的代码我得到了预期的结果,但我想把所有数据放入字典并显示它,所以我试图将数据转换为字典
NSDictionary *dataFromWeb = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
NSDictionary *queryDict = [dataFromWeb objectForKey:@"query"];
NSDictionary *results = [dataFromWeb objectForKey:@"results"];
NSString *allResults = [queryDict objectForKey:@"Results"];
NSLog(@"%@", dataFromWeb);
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试将 swift 对象转换为 JSON,我已经看到了这些 SO question 1 & 2,但我无法将其应用于我的代码。
我有一个 swift 类型的对象[String : DailyTimes],我想以纯 Swift 3 方式将其转换回 JSON 数据,无需任何库。
下面是我的自定义类:
class AvailabilityTimes:{
struct Times{
var startTime : String?
var endTime : String?
}
struct DailyTimes{
let weekday : String
var available : Bool
var times = [Times]()
mutating func update(times: [Times]){
self.times = times
}
}
}
Run Code Online (Sandbox Code Playgroud)
转换后的 JSON 数据(来自 Swift 对象)看起来像这样:
[
"Monday": [ "weekday" : "Monday",
"available" : true,
"times": [
["startTime": "9:00 AM", "endTime": …Run Code Online (Sandbox Code Playgroud) 这是返回错误的原因:
NSMutableArray *newArray = [[[NSMutableArray alloc] initWithArray:[NSJSONSerialization JSONObjectWithData:[[[appDelegate.Matches objectAtIndex:(NSUInteger)indexPath] objectForKey:@"chat"] dataUsingEncoding:NSUTF8StringEncoding] options:NSJSONReadingMutableContainers error:nil]] addObject:[NSDictionary dictionaryWithObjectsAndKeys:message, @"message", [NSString stringWithFormat:@"%llu", appDelegate.userId], @"id", nil]];
Run Code Online (Sandbox Code Playgroud) 我发布了一些东西之后,我正在使用NSJsonSerialization来取回一个json返回.我要么得到正确的回报,要么得到:
{
"status":"false"
}
Run Code Online (Sandbox Code Playgroud)
在我尝试解析它之前,我需要检查是否收回了我的回复(因为如果我要求的密钥不存在它会崩溃)但是如果我检查
[whatever objectForKey:@"status"] == nil
Run Code Online (Sandbox Code Playgroud)
当它是零时它没关系,但是如果它不存在它会崩溃(因为我收回了我的其他回报)
我得到的崩溃就是这个,似乎NSJSONSerialzation将NSArray作为NSdictionary返回?:
2012-07-02 11:03:40.426 [9412:10703] -[__NSArrayM objectForKey:]: unrecognized selector sent to instance 0x75f03f0
2012-07-02 11:03:40.429 [9412:10703] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSArrayM objectForKey:]: unrecognized selector sent to instance 0x75f03f0'
Run Code Online (Sandbox Code Playgroud)
我需要找出一种方法来了解我得到了哪些回报,以便我可以采取相应行动.
我正在使用JSON-RPC在iOS应用程序和服务器之间进行通信.服务器的某些返回值是可选的.
考虑到我正在使用的技术组合,最好是返回这些空值,如{"telephone":null},还是完全省略响应中的"telephone"元素?
对我要问的问题的进一步解释:
它看起来不像JSON-RPC规范与方法结果有很大关系(如果我错了请纠正我)并且显然不发送负载null元素会提高性能并减少带宽.我最感兴趣的是iOS NSJSONSerialization视角下的最佳方法.是否更容易/更好地检查NSDictionary中是否存在密钥或现有密钥是否具有空值?
要DeSerialize一个JSON字符串我使用以下方法:
+ (id)JSONObjectWithData:(NSData *)data options:(NSJSONReadingOptions)opt error:(NSError **)error
Run Code Online (Sandbox Code Playgroud)
但是,我发现阅读选项会返回可变对象.有没有办法使用哪种方法可以接收不可变的对象?
我目前正在阅读Pragmatic iOS 6书籍,并且无法理解第3章在关于GCD的部分中解释的以下代码行:
NSJSONSerialization *jsonResponse = [NSJSONSerialization JSONObjectWithData:data options:0 error:&jsonError];
//... some code here
NSArray *tweets = (NSArray *) jsonResponse; //<-- this line
Run Code Online (Sandbox Code Playgroud)
是说该NSJSONSSerialization对象可以自动返回NSSArray的一个实例,然后存储在tweets?我检查了Apple文档,但只看到了限制使用的项目NSJSONSerialization,但没有看到它可以转换为什么对象.
谢谢!
我有一些问题有线解析一些REST的反应时.问题是,我不能复制.有时它会发生,我在错误日志中没有相应的信息.
Error Domain=NSCocoaErrorDomain Code=3840 "The operation couldn’t be completed. (Cocoa error 3840.)" (Unexpected end of file during string parse (expected low-surrogate code point
but did not find one).) UserInfo=0x157bddb0 {NSDebugDescription=Unexpected end of file during string parse (expected low-surrogate code point but did not find one).}
Run Code Online (Sandbox Code Playgroud)
对不起,由于敏感的用户数据,我不允许从JSON-Response中提供任何信息(它只出现在一些内部帐户中,其中错误日志级别设置为低以检测此问题).
其他一些信息:
UPDATE 1:解析机构(NSData的的扩展)
- (NSDictionary *)objectFromJSONDataWithError:(NSError **)error {
NSDictionary *jsonObject = [NSJSONSerialization JSONObjectWithData: self
options: 0
error: error];
return jsonObject;
}
Run Code Online (Sandbox Code Playgroud)
更新2:用于下载数据的NSOperation - 主要()的内容 - …
我正在使用一个文件来处理我对API的调用,如下所示:
import UIKit
protocol APIControllerProtocol {
func JSONAPIResults(results: NSArray)
}
class APIController: NSObject {
var delegate:APIControllerProtocol?
func GetAPIResultsAsync(urlString:String, elementName:String) {
//The Url that will be called
var url = NSURL.URLWithString(urlString)
//Create a request
var request: NSURLRequest = NSURLRequest(URL: url)
//Create a queue to hold the call
var queue: NSOperationQueue = NSOperationQueue()
// Sending Asynchronous request using NSURLConnection
NSURLConnection.sendAsynchronousRequest(request, queue: queue, completionHandler:{(response:NSURLResponse!, responseData:NSData!, error: NSError!) ->Void in
var error: AutoreleasingUnsafeMutablePointer<NSError?> = nil
//Serialize the JSON result into a dictionary
let jsonResult: …Run Code Online (Sandbox Code Playgroud) 我写了一个帮助器类,我向服务器发出了所有请求(Rails 4.1).此帮助程序类中的大多数请求都可以正常工作,但一个特定请求始终失败.我正在使用Alamofire来满足我的要求.
这是我的助手类的一些代码:
let responseHandler = { (request: NSURLRequest, response: NSHTTPURLResponse?, object: AnyObject?, error: NSError?) -> Void in
println("request: \(request) || response: \(response) || object: \(object) || error: \(error)")
}
// make custom request
let request = NSMutableURLRequest(URL: NSURL(string: fullPath)!)
request.HTTPBody = NSJSONSerialization.dataWithJSONObject(["session_key": "ABC"], options: nil, error: nil)
request.HTTPMethod = "GET"
request.allHTTPHeaderFields = ["Accept": "application/json", "Content-Type": "application/json"]
Alamofire.request(request).response(responseHandler)
Run Code Online (Sandbox Code Playgroud)
这是println上面代码中该行的输出:
request: <NSMutableURLRequest: 0x1702007e0> { URL: http:/wolverine.movie-assistor.staging.c66.me/user } || response: nil || object: Optional(<>) || error: Optional(Error Domain=NSURLErrorDomain Code=-1017 "The …Run Code Online (Sandbox Code Playgroud)