【问题标题】:NSJSONSerialization data in a different format不同格式的 NSJSONSerialization 数据
【发布时间】:2013-03-21 10:43:14
【问题描述】:

我正在使用 Parse.com 作为我的应用程序的后端,我目前正在那里存储数据。

数据是视频游戏机的列表。我能够输出它,但输出不是 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"
    }
  ]
}

顺便说一句

为什么当我在代码中有一个单独的NSData时:

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

并将我的 NSJSONSerialization 更改为:

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

输出将是:

The list: {
    error = unauthorized;
}

【问题讨论】:

  • 有什么理由不使用 Parse 的 iOS SDK?
  • 没什么特别的。我最近刚刚遇到 Parse.com,并且正在使用它的 SDK。

标签: ios json parsing parse-platform nsjsonserialization


【解决方案1】:

第一个列表是一个NSDictionary,其中有一个名为“results”的键,其中NSArrayNSDictionaries

第二个列表是一样的..

编辑 1.0:

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

【讨论】:

  • 我明白了,但是为什么第一个输出和第二个不一样?我将如何实现第二个输出?
  • 你依赖的是NSLog,而不是你知道它会在那里。我可以举个例子:我知道,我拥有的 JSON 服务正在返回像“1233”这样的字符串。问题是在NSJSONSerialization之后我有NSNumbers而不是NSStrings..所以我只做stringValue,就是这样......
  • 作为预防措施,我复制结果并将其粘贴到在线 JSON 验证器并检查 JSON 是否正确。第一个不是,但第二个是。
  • 这很正常...是NSLogged... -.-
  • 谢谢!我才意识到;)
【解决方案2】:

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

【讨论】:

  • 如果认证不成功,为什么我有第一个输出?
  • 请在收到回复和收到列表时告诉我确切的步骤:{ 错误 = 未授权; }
  • 如果我有一个单独的 NSData 行并在 NSJSONSerialization 中手动调用它,我会得到一个 error = unauthorized。但是,如果 NSData 没有单独的行,我可以生成输出。
【解决方案3】:

我是个白痴。当我想要 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);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-24
    • 2021-12-26
    • 1970-01-01
    • 2022-12-21
    • 2012-01-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多