-2

我从 API 取回一些数据,数据是一个字符串。

po JSON
$22 = 0x26305840 {
    "thing_id" = 5192f9053000001;
    status = "{\"thing_request_id\":\"51c3a0608906f101f\",\"thing_id\":\"5192f9053000001\",\"status\":\"PICKUP\"}";
}

如何访问内部状态键?不是“stat =”一个。

我正在通过 socketIO 连接访问数据。

4

4 回答 4

1

您正在寻找的是 NSJSONSerialization。

你可以像这样使用它:

NSData *data = [stringJSON dataUsingEncoding:NSUTF8StringEncoding];
NSError *error;
id *yourJSON = [JSONObjectWithData:webData options:0 error:&error];

if(error) {
    NSLog(@"Error: %@", error);
} else {
    NSLog(@"You JSON: %@", yourJSON);
}

重要的是观察它可以返回一个数组或一个字典,这段代码只是一个例子。

文档:

http://developer.apple.com/library/ios/#documentation/Foundation/Reference/NSJSONSerialization_Class/Reference/Reference.html

于 2013-06-21T01:03:25.623 回答
0

不是有效的代码,但我只是简单地调用它两次就可以了。

NSError *jsonParsingError = nil;

NSDictionary *JSON =
[NSJSONSerialization JSONObjectWithData: [packet.args[0] dataUsingEncoding:NSUTF8StringEncoding]
                                options: NSJSONReadingMutableContainers
                                  error: &jsonParsingError];

NSString *lastStatus = [JSON objectForKey:@"status"];
    NSDictionary *lastStatusDict = [JSON objectForKey:@"status"];


    NSError *jsonParsingError = nil;
    NSDictionary *INNERJSON =
    [NSJSONSerialization JSONObjectWithData: [lastStatus dataUsingEncoding:NSUTF8StringEncoding]
                                    options: NSJSONReadingMutableContainers
                                      error: &jsonParsingError];
NSString *innerStatus = [INNERJSON objectForKey:@"status"];

然后我可以使用它

if ([innerStatus isEqualToString:kSENT]) { .....
于 2013-06-21T03:27:02.497 回答
0

此代码适用于使用不带引号的密钥修复 JSON。我从https://coderwall.com/p/tdra3w得到它

- (NSString *)fixJSON:(NSString *)s {
    NSRegularExpression *regexp = [NSRegularExpression regularExpressionWithPattern:@"[{,]\\s*(\\w+)\\s*:"
                                                                            options:0
                                                                              error:NULL];
    NSMutableString *b = [NSMutableString stringWithCapacity:([s length] * 1.1)];
    __block NSUInteger offset = 0;
    [regexp enumerateMatchesInString:s
                             options:0
                               range:NSMakeRange(0, [s length])
                          usingBlock:^(NSTextCheckingResult *result, NSMatchingFlags flags, BOOL *stop) {
                              NSRange r = [result rangeAtIndex:1];
                              [b appendString:[s substringWithRange:NSMakeRange(offset, r.location - offset)]];
                              [b appendString:@"\""];
                              [b appendString:[s substringWithRange:r]];
                              [b appendString:@"\""];
                              offset = r.location + r.length;
                          }];
    [b appendString:[s substringWithRange:NSMakeRange(offset, [s length] - offset)]];
    return b;
}
于 2013-06-21T00:59:47.820 回答
0

我建议添加 JSONKit,这样可以很容易地将其放入字典并访问每个元素。

NSData *jsonData = [yourJSONString dataUsingEncoding:NSUTF8String];
NSDictionary *dictionary = [jsonData objectFromJSONData];

然后,您可以像访问普通 NSDictionary 一样访问每个元素。

[dictionary objectForKey:@"status"];//etc

你可以在这里得到 JSONKit

于 2013-06-21T01:01:38.780 回答