如何将下面这样的 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 对象中拥有该字典(不是来自 descriptionNSString 对象),您只需执行 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字符串与字典互相转换

Python爬虫编程思想(78): JSON字符串与字典互相转换

如何将字符串转换为json字典。?

如何将 JSON 字典列表转换为 Snowflake 中的字符串列表?