2013-03-21 31 views
0

我使用Parse.com作为我的应用程序的后端,我正在其中存储数据。NSJSON以不同格式的串行化数据

该数据是一个视频游戏控制台列表。我能够做出它的输出,但不是JSON数据,输出是一个大的NSMutableArray。

这是我的viewDidLoad:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    NSURL *url = [NSURL URLWithString:@"https://api.parse.com/1/classes/Consoles"]; 
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; 

    [request setURL:url]; 
    [request setHTTPMethod:@"GET"]; 
    [request setValue:@"APPLICATION_ID" forHTTPHeaderField:@"X-Parse-Application-Id"]; 
    [request setValue:@"REST_API_KEY" forHTTPHeaderField:@"X-Parse-REST-API-Key"]; 

    NSError *error; 

    id listOfConsoles = [NSJSONSerialization JSONObjectWithData:[NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil] options:NSJSONReadingMutableContainers error:&error]; 

    NSLog(@"The list: %@", listOfConsoles); 
} 

输出:

The list: { 
    results =  (
       { 
      createdAt = "2013-03-21T07:26:04.149Z"; 
      name = PlayStation; 
      objectId = vloIK0MZIA; 
      updatedAt = "2013-03-21T07:26:04.149Z"; 
     }, 
       { 
      createdAt = "2013-03-21T07:26:34.209Z"; 
      name = Wii; 
      objectId = RIRpgbznlq; 
      updatedAt = "2013-03-21T07:26:34.209Z"; 
     }, 
       { 
      createdAt = "2013-03-21T07:26:39.391Z"; 
      name = Xbox; 
      objectId = xBNgHtJbrV; 
      updatedAt = "2013-03-21T07:26:39.391Z"; 
     } 
    ); 
} 

我所要的输出是什么:

{ 
    "results" : [ 
    { 
     "objectId" : "vloIK0MZIA", 
     "updatedAt" : "2013-03-21T07:26:04.149Z", 
     "createdAt" : "2013-03-21T07:26:04.149Z", 
     "name" : "PlayStation" 
    }, 
    { 
     "objectId" : "RIRpgbznlq", 
     "updatedAt" : "2013-03-21T07:26:34.209Z", 
     "createdAt" : "2013-03-21T07:26:34.209Z", 
     "name" : "Wii" 
    }, 
    { 
     "objectId" : "xBNgHtJbrV", 
     "updatedAt" : "2013-03-21T07:26:39.391Z", 
     "createdAt" : "2013-03-21T07:26:39.391Z", 
     "name" : "Xbox" 
    } 
    ] 
} 

BY THE WAY

为什么,当我有一个单独的的NSData代码:

NSData *JSONData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];

而改变我的NSJSONSerialization到:

id listOfConsoles = [NSJSONSerialization JSONObjectWithData:JSONData options:NSJSONReadingMutableContainers error:&error];

输出将是:

The list: { 
    error = unauthorized; 
} 
+0

你没有使用Parse的iOS SDK的任何原因? – 2013-03-21 14:39:24

+0

没有什么特别的。我最近刚刚遇到了Parse.com,并且正在使用它的SDK。 – Jahm 2013-03-21 15:17:16

回答

1

第一个列表是一个NSDictionary与所谓的“结果”一单键其中有NSDictionariesNSArray

第二个名单是同样的事情..

编辑1.0:

只是为了澄清,第二输出是JSON,好吗?就这样,只需检查here并验证自己。第一个是在NSObject内输出的JSON。当然会有细微的差别...

+0

我明白了,但第一个输出与第二个输出不一样?我将如何实现第二个输出? – Jahm 2013-03-21 10:50:43

+0

你依赖于'NSLog',而不是你知道它会在那里。我可以举一个例子:我知道,我的JSON服务正在返回字符串,如“1233”。事情是,在'NSJSONSerialization'之后我有'NSNumbers'而不是'NSStrings' ..所以我只是'stringValue',就是这样... – Peres 2013-03-21 10:52:37

+0

作为预防措施,我会复制结果并粘贴到一个在线的JSON验证器并检查JSON是否正确。第一个不是,但是第二个是。 – Jahm 2013-03-21 10:56:30

0

您的验证未成功完成。请检查APPLICATION_IDREST_API_KEY值。

+0

如果认证不成功,为什么我有第一个输出? – Jahm 2013-03-21 10:48:33

+0

请告诉我确切的一步,当你得到回应,当你得到清单:{ 错误=未经授权; } – Yashesh 2013-03-21 10:53:24

+0

如果我对** NSData **有一个单独的行并在** NSJSONSerialization **内部手动调用它,我将得到一个'error = unauthorized'。但是,如果我不会为** NSData **分开一行,则可以生成输出。 – Jahm 2013-03-21 10:59:29

0

我是个白痴。当我想要JSON数据时,我从未意识到我试图将JSON转换为其他东西。

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    NSURL *url = [NSURL URLWithString:@"https://api.parse.com/1/classes/Consoles"]; 
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; 

    [request setURL:url]; 
    [request setHTTPMethod:@"GET"]; 
    [request setValue:@"APPLICATION_ID" forHTTPHeaderField:@"X-Parse-Application-Id"]; 
    [request setValue:@"REST_API_KEY" forHTTPHeaderField:@"X-Parse-REST-API-Key"]; 

    NSString *listOfConsoles = [[NSString alloc] initWithData:[NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil] encoding:NSUTF8StringEncoding]; 

    NSLog(@"%@", listOfConsoles); 
}