Deserialize your JSON string to get a dictionary with values. Then parse out the bits as you need them.
First parse out the string:
NSString *myString = [dictionaryFromJson objectForKey:@"string"];
NSMutableAttributedString *myAttributedString = [[NSMutableAttributedString alloc] initWithString:myString];
Then parse out the array:
NSArray *attributes = [dictionaryFromJson objectForKey:@"runs"];
Then traverse the array and for each dictionary in it, create the attributes as needed:
for(NSDictionary *dict in attributes)
{
NSArray *rangeArray = [dict objectForKey:@"range"];
NSRange range = NSMakeRange([(NSNumber*)[rangeArray objectAtIndex:0] intValue], [(NSNumber*)[rangeArray objectAtIndex:0] intValue]); //you may need to make sure here your types in array match up and of course that you are in bounds of array
NSDictionary *attributesDictionary = [dict objectForKey:@"attributes"];
//I'll do the font as example
NSDictionary *fontDictionary = [attributesDictionary objectForKey:@"font"];
if(fontDictionary)
{
NSString *fontName = [fontDictionary objectForKey:@"name"];
float fontSize = [[fontDictionary objectForKey:@"size"] floatValue];
UIFont *myFont = [UIFont fontWithName:fontName size:fontSize];
if(myFont)
{
[myAttributedString addAttribute:NSFontAttributeName value:myFont range:range];
}
}
}
Then just carry on with the rest of the values, manipulating data based on whether they come from dictionaries or arrays.
You will also need to do some validation, null-checks etc., so this code is by no means complete.