My task is to parse some JSON which was created by running an XML to JSON conversion tool on an XML WADL. I’m able to parse the data returned in the response into JSON and I’m able to obtain the top level NSDictionary from the data. I can get an array from the dictionary and an NSDictionary from the Array ( it includes the key value but thats it) and thats as deep as I can go. I’ve done parsing in the past but this particular JSON format I am having no luck? Here is the code I’m using..
// Decode the data
NSError *parseError = nil;
NSData *jsonData = [request responseData];
NSDictionary *responseDict = [NSJSONSerialization JSONObjectWithData:jsonData options:0 error:&parseError];
if (parseError) {
NSLog(@"Error: %@", [parseError localizedDescription]);
// other stuff..
return;
}
NSLog(@"JSON=: %@", responseDict.description);
NSArray *messageBoxResponse = [responseDict objectForKey:@"messageBoxResponse"];
NSLog(@"messageBoxResponse=: %@", messageBoxResponse);
NSUInteger count = messageBoxResponse.count;
for (NSDictionary* messages in messageBoxResponse) {
NSLog(@"Messages=: %@", messages.description);
NSArray *message = [messages objectForKey:@"message"];
// get SIGABRT
count = message.count;
// If I comment out above line and introduce this I get SIGABRT also
for (NSDictionary* something in message) {
NSLog(@"Somthing=: %@", something.description);
}
Here is the JSON I’m attempting to parse.. IPs have been changed :):
{
messageBoxResponse = {
messages = {
link = {
href = "http://1.1.1.1:80/services/messageboxes/63358/messages";
rel = self;
};
message = (
{
flags = {
answered = 0;
link = {
href = "http://1.1.1.1:80/services/messageboxes/63358/messages/<4F3131A3.6040204@sc-msg1-msg.sc.sc>/flags";
rel = self;
};
taggedForDeletion = 0;
unread = 0;
};
from = "Suren.1@sc-msg1-msg.sc.sc";
link = {
href = "http://1.1.1.1:80/services/messageboxes/63358/messages/<4F3131A3.6040204@sc-msg1-msg.sc.sc>";
rel = self;
};
parts = {
link = {
href = "http://1.1.1.1:80/services/messageboxes/63358/messages/<4F3131A3.6040204@sc-msg1-msg.sc.sc>/parts";
rel = self;
};
part = {
link = {
href = "http://1.1.1.1:80/services/messageboxes/63358/messages/<4F3131A3.6040204@sc-msg1-msg.sc.sc>/parts/0";
rel = self;
};
mimeType = "TEXT/PLAIN";
name = "text.txt";
size = 564;
};
};
receivedDate = 1328624061000;
sentDate = 1328624035000;
subject = test;
},
{
flags = {
answered = 0;
link = {
href = "http://1.1.1.1:80/services/messageboxes/63358/messages/<24346739.35.1328562602976.JavaMail.mango@sc-msg1-msg.sc.sc>/flags";
rel = self;
};
taggedForDeletion = 0;
unread = 0;
};
from = "Suren.1@sc-msg1-msg.sc.sc";
link = {
href = "http://1.1.1.1:80/services/messageboxes/63358/messages/<24346739.35.1328562602976.JavaMail.mango@sc-msg1-msg.sc.sc>";
rel = self;
};
parts = {
link = {
href = "http://1.1.1.1:80/services/messageboxes/63358/messages/<24346739.35.1328562602976.JavaMail.mango@sc-msg1-msg.sc.sc>/parts";
rel = self;
};
part = (
{
link = {
href = "http://1.1.1.1:80/services/messageboxes/63358/messages/<24346739.35.1328562602976.JavaMail.mango@sc-msg1-msg.sc.sc>/parts/0";
rel = self;
};
mimeType = "TEXT/PLAIN";
name = "text.txt";
size = 6;
},
{
content = {
href = "http://1.1.1.1:80/services/messageboxes/63358/messages/<24346739.35.1328562602976.JavaMail.mango@sc-msg1-msg.sc.sc>/parts/1/2c3a3400620f218d5378607260dc2749.wav";
rel = content;
};
duration = 3;
link = {
href = "http://1.1.1.1:80/services/messageboxes/63358/messages/<24346739.35.1328562602976.JavaMail.mango@sc-msg1-msg.sc.sc>/parts/1";
rel = self;
};
mimeType = "AUDIO/WAV";
name = "Audio_Recording_S000551_002.wav";
size = 31190;
},
{
link = {
href = "http://1.1.1.1:80/services/messageboxes/63358/messages/<24346739.35.1328562602976.JavaMail.mango@sc-msg1-msg.sc.sc>/parts/2";
rel = self;
};
mimeType = "APPLICATION/MS-TNEF";
name = "winmail.dat";
size = 656;
}
);
};
receivedDate = 1328562604000;
sentDate = 1328562596000;
subject = "Voice Message from Suren 1 (63357)";
}
);
};
};
}
Its because the json is not valid. It should look more like this:
the ‘=’ need to be ‘:’ there are semicolons that shouldn’t be there.