如何将下面这样的 json 字符串转换为字典?
Posted
技术标签:
【中文标题】如何将下面这样的 json 字符串转换为字典?【英文标题】:How to take a json string like this below to transform to dictionary? 【发布时间】:2016-08-22 11:05:04 【问题描述】:我有一个这样的 json:
`
"_j_msgid" = 2404589949;
aps =
alert = "E\U519c\U901a";
badge = 26;
sound = "happy.caf";
;
data = "title=\U901a\U77e5\U516c\U544a, pushId=15, pushType=NOTICECOL"; // this line is my want.
`
但是,我用我的方法把json字符串取到dictionary
:
+ (NSDictionary *)dictionaryWithJsonString:(NSString *)jsonString
if (jsonString == nil)
return nil;
NSData *jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
NSError *err;
NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:jsonData
options:NSJSONReadingMutableContainers
error:&err];
if(err)
NSLog(@"json fail:%@",err);
return nil;
return dic;
我失败了,得到一个 nil 字典。
所以,我将data
的=
转换为:
,然后使用+ (NSDictionary *)dictionaryWithJsonString:(NSString *)jsonString
将转换后的json
字符串转换为字典,我又失败了。
是否有一些有用的方法可以将这种类型的json
字符串转换为字典?
【问题讨论】:
请您尽快以字符串格式显示您的json字符串吗? 检查我的答案兄弟。我完全明白了。 看起来你得到的是NSDictionary
对象的-description
而不是真正的JSON。你从哪里得到这个?因此,如果您在 NSDictionary
对象中拥有该字典(不是来自 description
的 NSString
对象),您只需执行 NSDictionary *dict = [NSDictionary dictionaryWithJsonString:thatDict[@"data"]]
【参考方案1】:
你的json字符串错误,请检查一次,应该是这样的
"_j_msgid" : 2404589949,
"aps" :
"alert" : "E\\U519c\\U901a",
"badge" : 26,
"sound" : "happy.caf"
,
"data" : "title=\\U901a%5CU77e5\\U516c%5CU544a, pushId=15, pushType=NOTICECOL"
【讨论】:
【参考方案2】:我尝试了解决方案,我得到了它。
你的json在上面。那是json响应。无论你将JSON转换为字符串时,它都应该是
NSString *strJson = @"\"_j_msgid\":\"2404589949\",\"aps\" : \"alert\" :\"EU519cU901a\",\"badge\":\"26\",\"sound\":\"happy.caf\",\"data\":\"title\" :\"U901aU77e5U516cU544a\",\"pushId\":\"15\",\"pushType\":\"NOTICECOL\"";
当你转换成字符串时你应该添加
\"键\":\"值\"
如果是字典
\"key\":\"value\"
如果字典在数组内
[\"响应\":\"key\":\"value\"]
然后是编码
NSError *jsonError;
NSString *strJson = @"\"_j_msgid\":\"2404589949\",\"aps\" : \"alert\" :\"EU519cU901a\",\"badge\":\"26\",\"sound\":\"happy.caf\",\"data\":\"title\" :\"U901aU77e5U516cU544a\",\"pushId\":\"15\",\"pushType\":\"NOTICECOL\"";
NSData *objectData = [strJson dataUsingEncoding:NSUTF8StringEncoding];
NSDictionary *json = [NSJSONSerialization JSONObjectWithData:objectData
options:NSJSONReadingMutableContainers
error:&jsonError];
NSLog(@"json is - %@",json);
打印出来的结果是
json is -
"_j_msgid" = 2404589949;
aps =
alert = EU519cU901a;
badge = 26;
sound = "happy.caf";
;
data =
pushId = 15;
pushType = NOTICECOL;
title = U901aU77e5U516cU544a;
;
【讨论】:
以上是关于如何将下面这样的 json 字符串转换为字典?的主要内容,如果未能解决你的问题,请参考以下文章
如何将afnetworking json字典转换为字符串,然后在IOS中将字符串转换为字典?
Python爬虫编程思想(78): JSON字符串与字典互相转换