Reputation: 81
I'm trying to send an image to a server using JSON. The data is still correct until the where i set up my dictionary to encode with the NSJSONSerialization: The function i use:
- (NSData*) getHTTPBody
{
if ([NSJSONSerialization isValidJSONObject:jsonMessage])
{
NSError * error = Nil;
NSData * jsonData = [NSJSONSerialization dataWithJSONObject:jsonMessage options:0 error:&error];
NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
return jsonData;
}
return Nil;
}
with the following input:
Printing description of self->jsonMessage:
{
function = addattachment;
variables = {
attachment = {
enddate = 1377475200000;
file = "/9j/4AAQSkZJRgABAQAAAQABAAD/4QBYRXhpZgAATU0AKgAAAAgAAgESAAMAAAABAAEAAIdpAAQAAAABAAAAJgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAEKADAAQAAAABAAAAEAAAAAD/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/2wBDAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/wAARCAAQABADAREAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD+gb9oH9pvRf29Nb+JX7Pnwq+LHj74bfB/wXDpcHirxz8Pv2fvih8d7v4tXepXepW0+irF8MVa48LeALQ6fg3Oq7V+ISPKtv8A8U7ZSnV/6v4c4QxXgxhsj4wz/hzA53nuZVKjwmWY7OMPlKyiNGLvNTr8yxOKmnD2nLG9FScaTS551/8APLjfxOyb6SGI4h8PuGuLsTw1wvlsMO8XmFHJ8RmbzdVJRnFSp2hPDUqM01Btrnkk5q7iqfUfBf43Qf8ABO3/AIUd8G/i/wDGDXPih8EfjFY+I7jwD408V/DHxP8ACfxL8G38P3+h2S6L4n8N+MtUvfE3/CH31xrQMZ1iz0W88FokSvZ3fh6+jfSePiHh/EeOEuIeJeHuHaOQcQ5U6TxmW4XHLMKebKrTjKM44mMKdFYpRUlCSjL2rgqVSatGVD0eCeN8u+jPDhjg3iPjJ8S8H55HFvLcdVy94Cpk8qFSbrqWHTnXq06tS91K3JKcpQi9VUPjR8EYP+Cdv/C8vjJ8IPhBrnxQ+CPxisfDlt4+8F+FPid4m+E/iX4OP4fv9cvTrXhjxJ4N0u98T/8ACH31xrRDjR7zRbzwWiysl5d+Hr6RNIOHuIa/jhLh7hriHiOjkHEGVOqsHmWLwMcwp5tGrTlGUJ4aVSFGOKUUnOLlL2rg6tOCtKNBcbcEZd9GenxPxlw5wa+JeD88jhFmWBpZg8BUyeWHqRVFxxMoyr1adWronG3JJqM5OydXlv2fv2ZdF/bz1v4bftB/FX4T+Pvht8H/AAXDqs/hXwN8Qf2gfih8d7v4tXWo3em3MGtGX4nM1x4W8AWh0/IttJ2r8Q0eJpx/wjtlENX7OI+L8V4MYbPOD8g4iwOd57mNSmsXmeCyfD5QsoVGKtBwoc6xGKmnP2fNK9HmUqqSUIVvO4I8Mcm+kfX4f8QuJeEMTw3wvlsMSsJl1fOK+ZvN1VlKEuWpeM8NSozSclb35JqLu5On/9k=";
filename = "photo.jpg";
label = "Bhhhb ";
startdate = 1377475200000;
};
};
}
Which seems to be correct. In fact, i've tested the Base64 string and converted it back on a online decoder, it works flawless.
Anyway, the JSON NSData object is generated. From testing purposes i'm converting it back to an NSString. This is the result:
Printing description of jsonString:
{"variables":
{"attachment":
{"enddate":1377475200000,
"filename":"photo.jpg",
"label":"Bhhhb ",
"file":"\/9j\/4AAQSkZJRgABAQAAAQABAAD\/4QBYRXhpZgAATU0AKgAAAAgAAgESAAMAAAABAAEAAIdpAAQAAAABAAAAJgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAEKADAAQAAAABAAAAEAAAAAD\/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH\/2wBDAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH\/wAARCAAQABADAREAAhEBAxEB\/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL\/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6\/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL\/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6\/9oADAMBAAIRAxEAPwD+gb9oH9pvRf29Nb+JX7Pnwq+LHj74bfB\/wXDpcHirxz8Pv2fvih8d7v4tXepXepW0+irF8MVa48LeALQ6fg3Oq7V+ISPKtv8A8U7ZSnV\/6v4c4QxXgxhsj4wz\/hzA53nuZVKjwmWY7OMPlKyiNGLvNTr8yxOKmnD2nLG9FScaTS551\/8APLjfxOyb6SGI4h8PuGuLsTw1wvlsMO8XmFHJ8RmbzdVJRnFSp2hPDUqM01Btrnkk5q7iqfUfBf43Qf8ABO3\/AIUd8G\/i\/wDGDXPih8EfjFY+I7jwD408V\/DHxP8ACfxL8G38P3+h2S6L4n8N+MtUvfE3\/CH31xrQMZ1iz0W88FokSvZ3fh6+jfSePiHh\/EeOEuIeJeHuHaOQcQ5U6TxmW4XHLMKebKrTjKM44mMKdFYpRUlCSjL2rgqVSatGVD0eCeN8u+jPDhjg3iPjJ8S8H55HFvLcdVy94Cpk8qFSbrqWHTnXq06tS91K3JKcpQi9VUPjR8EYP+Cdv\/C8vjJ8IPhBrnxQ+CPxisfDlt4+8F+FPid4m+E\/iX4OP4fv9cvTrXhjxJ4N0u98T\/8ACH31xrRDjR7zRbzwWiysl5d+Hr6RNIOHuIa\/jhLh7hriHiOjkHEGVOqsHmWLwMcwp5tGrTlGUJ4aVSFGOKUUnOLlL2rg6tOCtKNBcbcEZd9GenxPxlw5wa+JeD88jhFmWBpZg8BUyeWHqRVFxxMoyr1adWronG3JJqM5OydXlv2fv2ZdF\/bz1v4bftB\/FX4T+Pvht8H\/AAXDqs\/hXwN8Qf2gfih8d7v4tXWo3em3MGtGX4nM1x4W8AWh0\/IttJ2r8Q0eJpx\/wjtlENX7OI+L8V4MYbPOD8g4iwOd57mNSmsXmeCyfD5QsoVGKtBwoc6xGKmnP2fNK9HmUqqSUIVvO4I8Mcm+kfX4f8QuJeEMTw3wvlsMSsJl1fOK+ZvN1VlKEuWpeM8NSozSclb35JqLu5On\/9k=",
"startdate":1377475200000}
},
"function":"addattachment"}
All the slashes (/) in the original base64 are backslash () escaped. Therefore the data is corrupt. Is there an option to let the JSONSerialization know to not escape the strings?
Many thanks in advance.
Upvotes: 2
Views: 1598
Reputation: 81
It seems it is a backend problem.
Sent to server:
/9j/4AAQSkZJRgABAQAAAQABAAD/4QBYRXhpZgAATU0AKgAAAAgAAgESAAMAAAABAAEAAIdpAAQAAAABAAAAJgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAEKADAAQAAAABAAAAEAAAAAD/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/2wBDAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/wAARCAAQABADAREAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD+gb9oH9pvRf29Nb+JX7Pnwq+LHj74bfB/wXDpcHirxz8Pv2fvih8d7v4tXepXepW0+irF8MVa48LeALQ6fg3Oq7V+ISPKtv8A8U7ZSnV/6v4c4QxXgxhsj4wz/hzA53nuZVKjwmWY7OMPlKyiNGLvNTr8yxOKmnD2nLG9FScaTS551/8APLjfxOyb6SGI4h8PuGuLsTw1wvlsMO8XmFHJ8RmbzdVJRnFSp2hPDUqM01Btrnkk5q7iqfUfBf43Qf8ABO3/AIUd8G/i/wDGDXPih8EfjFY+I7jwD408V/DHxP8ACfxL8G38P3+h2S6L4n8N+MtUvfE3/CH31xrQMZ1iz0W88FokSvZ3fh6+jfSePiHh/EeOEuIeJeHuHaOQcQ5U6TxmW4XHLMKebKrTjKM44mMKdFYpRUlCSjL2rgqVSatGVD0eCeN8u+jPDhjg3iPjJ8S8H55HFvLcdVy94Cpk8qFSbrqWHTnXq06tS91K3JKcpQi9VUPjR8EYP+Cdv/C8vjJ8IPhBrnxQ+CPxisfDlt4+8F+FPid4m+E/iX4OP4fv9cvTrXhjxJ4N0u98T/8ACH31xrRDjR7zRbzwWiysl5d+Hr6RNIOHuIa/jhLh7hriHiOjkHEGVOqsHmWLwMcwp5tGrTlGUJ4aVSFGOKUUnOLlL2rg6tOCtKNBcbcEZd9GenxPxlw5wa+JeD88jhFmWBpZg8BUyeWHqRVFxxMoyr1adWronG3JJqM5OydXlv2fv2ZdF/bz1v4bftB/FX4T+Pvht8H/AAXDqs/hXwN8Qf2gfih8d7v4tXWo3em3MGtGX4nM1x4W8AWh0/IttJ2r8Q0eJpx/wjtlENX7OI+L8V4MYbPOD8g4iwOd57mNSmsXmeCyfD5QsoVGKtBwoc6xGKmnP2fNK9HmUqqSUIVvO4I8Mcm+kfX4f8QuJeEMTw3wvlsMSsJl1fOK+ZvN1VlKEuWpeM8NSozSclb35JqLu5On/9k=
Retrieved:
/9j/4AAQSkZJRgABAQAAAQABAAD/4QBYRXhpZgAATU0AKgAAAAgAAgESAAMAAAABAAEAAIdpAAQAAAABAAAAJgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAEKADAAQAAAABAAAAEAAAAAD/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/2wBDAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/wAARCAAQABADAREAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDI/kaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMj8IFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD+P79oH9pvRf29Nb+JX7Pnwq+LHj74bfB/wXDpcHirxz8Pv2fvih8d7v4tXepXepW0+irF8MVa48LeALQ6fg3Oq7V+ISPKtv8A8U7ZSnV/6v4c4QxXgxhsP4wz/hzA53nuZVKjwmWY7OMPlKyiNGLvNTr8yxOKmnD2nLG9FScaTS551/8APLjfxOyb6SGI4h8PuGuLsTw1wvlsMO8XmFHJ8RmbzdVJRnFSp2hPDUqM01Btrnkk5q7iqfUfBf43Qf8ABO3/AIUd8G/i/wDGDXPih8EfjFY+I7jwDz88V/DHxP8ACfxL8G38P3+h2S6L4n8N+MtUvfE3/CH31xrQMT9iz0W88FokSvZ3fh6+P/SePiHh/EeOEuIeJeHuHaM/cQ5U6TxmW4XHLMKebKrTjKM44mMKdFYpRUlCSjL2rgqVSatGVD0eCeN8u+jPDhjg3iPjJ8S8H55HFvLcdVy94Cpk8qFSbrqWHTnXq06tS91K3JKcpQi9VUPjR8EYP+A/v/C8vjJ8IPhBrnxQ+CPxisfDlt4+8F+FPid4m+E/iX4OP4fv9cvTrXhjxJ4N0u98T/8ACH31xrRDPx7zRbzwWiysl5d+Hr6RNIOHuIa/jhLh7hriHiOjP3EGVOqsHmWLwMcwp5tGrTlGUJ4aVSFGOKUUnOLlL2rg6tOCtKNBcbcEZd9GenxPxlw5wa+JeD88jhFmWBpZg8BUyeWHqRVFxxMoyr1adWronG3JJqM5OydXlv2fv2ZdF/bz1v4bftB/FX4T+Pvht8H/AAXDqs/hXwN8Qf2gfih8d7v4tXWo3em3MGtGX4nM1x4W8AWh0/IttD+r8Q0eJpx/wjtlENX7OD+L8V4MYbPOD8g4iwM/57k/SmsXmeCyfD5QsoVGKtBwoc6xGKmnP2fNK9HmUqqSUIVvO4I8Mcm+kfX4f8QuJeEMTw3wvlsMSsJl1fOK+ZvN1VlKEuWpeM8NSozSclb35JqLu5On/9k=
And after searching both strings, it seems that there are some changes in the Base64 string which cant be resolved at the client side... Client expects: output == input.
Upvotes: 1