2017-03-07 58 views
0

我有以下用于接收PubNub消息的对象C代码。将从PubNub收到的消息转换为字典对象

- (void)client:(PubNub *)client didReceiveMessage:(PNMessageResult *)message { 


    NSLog(@"Received message: %@ on channel %@ at %@", message.data.message, 
    message.data.subscribedChannel, message.data.timetoken); 

} 

返回的数据是

Received message: (
    { 
    key = userName; 
    value = Enoch; 
}, 
    { 
    key = photoID; 
    value = 3; 
}, 
    { 
    key = userID; 
    value = 1; 
}, 
    { 
    key = actionType; 
    value = chat; 
}, 
    { 
    key = message; 
    value = H; 
} 
) on channel chat at 14888810882049989 

我想解析消息Dictionary对象通过使用“钥匙”

访问“值”我非常新客观的C编程,不知道该怎么做。

请帮忙。

+0

,你叫这个'didReceiveMessage'中的appdelegate或您的VC –

回答

1

循环访问消息数组并设置字典中的键值。

NSArray *array = (NSArray*)message.data.message; 
NSMutableDictionary *dic = [[NSMutableDictionary alloc] init]; 
for (NSDictionary *item in array) { 
    [dic setObject:[item objectForKey:@"value"] forKey:[item objectForKey:@"key"]]; 
} 
NSLog(@"%@", dic); 

或者

NSArray *array = (NSArray*)message.data.message; 
NSArray *values = [array valueForKey: @"value"]; 
NSArray *keys = [array valueForKey: @"key"]; 
NSDictionary *dic = [[NSDictionary alloc] initWithObjects:values forKeys:keys]; 
NSLog(@"%@", dic); 
+0

感谢。它的工作。 –

+0

@EnochChan欢迎队友:) –

+0

它的一个字典'message.data.message'的数组,然后为什么你采取了另一个对话 –

0

您可以使用以下方法解析您的数据,并将其转换成字典

ChatterBoxMessage *chatterBoxMessage = [[ChatterBoxMessage alloc] initFromDictionary: message.data.message withTimeToken: message.data.timetoken]; 

[chatterBoxMessage asDictionary]; 

通过这种方法,你会得到dictionary

上面的ChatterBoxMessage是一个PubNub库类。

你也可以像解析如下数据:

for (NSDictionary *objectData in message.data.message) { 
     NSLog(@"Value : %@",objectData[@"value"]); 
     NSLog(@"Key : %@",objectData[@"key"]); 
}