From fb47b70d36f515e0d94a579d8519b1b275143248 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=BAlvio=20Abrah=C3=A3o=20de=20Paula?= Date: Thu, 17 Aug 2023 11:19:50 -0700 Subject: [PATCH] Parse NSDictionary in ObjectMapper. Summary: Some objects returned from sqlite in json blob is a NSDictionary, we need to parse data at this case. Differential Revision: D48394361 fbshipit-source-id: c977ebdd33c392fca77741cdacdeb0c975e2ca36 --- .../FlipperKitDatabasesPlugin/ObjectMapper.m | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/iOS/Plugins/FlipperKitDatabasesPlugin/FlipperKitDatabasesPlugin/ObjectMapper.m b/iOS/Plugins/FlipperKitDatabasesPlugin/FlipperKitDatabasesPlugin/ObjectMapper.m index 14fa42d5b..912971456 100644 --- a/iOS/Plugins/FlipperKitDatabasesPlugin/FlipperKitDatabasesPlugin/ObjectMapper.m +++ b/iOS/Plugins/FlipperKitDatabasesPlugin/FlipperKitDatabasesPlugin/ObjectMapper.m @@ -151,6 +151,25 @@ static NSString* const UNKNOWN_BLOB_LABEL_FORMAT = @"{%d-byte %@ blob}"; } else if ([object isKindOfClass:[NSData class]]) { NSString* blobString = [self blobToString:(NSData*)object]; return @{@"type" : @"blob", @"value" : blobString}; + } else if ([object isKindOfClass:[NSDictionary class]]) { + // Usualy the dictionary is a Json blob, and we can parse it as string. + NSError* error; + NSData* jsonData = [NSJSONSerialization dataWithJSONObject:object + options:0 + error:&error]; + if (!jsonData) { + NSString* reason = [NSString + stringWithFormat:@"NSDictionary is not in a json format: %@", + [error localizedDescription]]; + @throw [NSException exceptionWithName:@"InvalidArgumentException" + reason:reason + userInfo:nil]; + } + + NSString* jsonString = [[NSString alloc] initWithData:jsonData + encoding:NSUTF8StringEncoding]; + return @{@"type" : @"blob", @"value" : jsonString}; + } else if ([object isKindOfClass:[NSValue class]]) { return @{@"type" : @"boolean", @"value" : object}; } else {