首页 新闻 会员 周边 捐助

JSON两层大括号如何解析?

0
悬赏园豆:10 [已解决问题] 解决于 2014-07-23 12:22

 string jsontest = "{\"message\":\"获取成功\",\"responseCode\":\"000000\",\"data\":{\"id\":\"E0Q10AzOXSsmsituSpsNLN2DT9KlIvZf94a\",\"data\":null,\"token\":null,\"local\":\"CN\",\"username\":null,\"createTime\":\"1406016650423\",\"login\":\"15102144265\",\"userid\":\"c00050001629\",\"dataSrc\":\"00\",\"funcBmp\":\"6160\",\"userStatus\":\"1\",\"pwdMd\":\"0\",\"mobile\":\"15102144265\",\"welcomeWord\":\"welcome my kingd\",\"loginName\":\"15102144265\",\"email\":null,\"ip\":null,\"lastLoginTime\":\"2014-07-22 04:10:50\",\"destId\":null,\"relateId\":\"50001629\",\"unionFlag\":\"0\"}}";

如何用Newtonsoft.Json一次都解析出来?

十里外教堂的主页 十里外教堂 | 初学一级 | 园豆:71
提问于:2014-07-22 16:55
< >
分享
最佳答案
0

可以使用序列化,定义一个对应你Json格式的实体,序列化一下就可以了。

//JsonModel 根据你的Json字符串设计的Model,属性自己补充完吧,太多了.
var jsonList= Newtonsoft.Json.JsonConvert.DeserializeObject<JsonModel>(jsontest);

public class JsonModel
{
public string Message { get; set; }
public string ResponseCode { get; set; }
public DataClass Data { get; set; }
}


public class DataClass
{
public string Id { get; set; }
public string Data { get; set; }
public string Token { get; set; }
public string Local { get; set; }
public string Username { get; set; }
public string CreateTime { get; set; }
}

 
收获园豆:10
晓菜鸟 | 老鸟四级 |园豆:2594 | 2014-07-22 17:04

   Dictionary<string, string> _dic2 = JsonConvert.DeserializeObject<Dictionary<string, string>>(jsontest);
           
                string id = "", data = "", userid = "";
                //取值
                _dic2.TryGetValue("id", out id);
                _dic2.TryGetValue("data", out data);
                _dic2.TryGetValue("userid", out userid);
            能不能像这样直接读取,总感觉实体类比较麻烦的!

十里外教堂 | 园豆:71 (初学一级) | 2014-07-22 17:21

@十里外教堂: 你代码都写了,为什么不运行调试一下呢?

晓菜鸟 | 园豆:2594 (老鸟四级) | 2014-07-22 17:22

@晓菜鸟: 调试过,报错了,所以出来请教各位大虾的!

十里外教堂 | 园豆:71 (初学一级) | 2014-07-22 17:25

@十里外教堂: 好的,我来看看。

晓菜鸟 | 园豆:2594 (老鸟四级) | 2014-07-22 18:42

@十里外教堂: 是会报错的,因为你的Json里面的Data里面对应的也是Json,你用Dictionary<string, string>是没有办法解析出来的。

晓菜鸟 | 园豆:2594 (老鸟四级) | 2014-07-23 08:59

@十里外教堂: 可以他们会觉得其他的一些东西挺好用的,但是我感觉.Net封装的这个也不错啊。

晓菜鸟 | 园豆:2594 (老鸟四级) | 2014-07-23 09:07

@晓菜鸟: 我用实体类的方法做出来了,用linq to json也是可以做出来的,Jayrock也是可以做的,这些我都试过的,感觉还是实体类要常规一点。

十里外教堂 | 园豆:71 (初学一级) | 2014-07-23 09:10

@十里外教堂: 嗯,多多尝试是好的。

晓菜鸟 | 园豆:2594 (老鸟四级) | 2014-07-23 09:14
其他回答(3)
0

定义一个正确的实体类就能解析出来了.

data是一个对象.再定义个符合data格式的实体类就行

吴瑞祥 | 园豆:29449 (高人七级) | 2014-07-22 16:57

string jsontest = "{\"message\":\"获取成功\",\"responseCode\":\"000000\",\"data\":{\"id\":\"E0Q10AzOXSsmsituSpsNLN2DT9KlIvZf94a\",\"data\":null,\"token\":null,\"local\":\"CN\",\"username\":null,\"createTime\":\"1406016650423\",\"login\":\"15102144265\",\"userid\":\"c00050001629\",\"dataSrc\":\"00\",\"funcBmp\":\"6160\",\"userStatus\":\"1\",\"pwdMd\":\"0\",\"mobile\":\"15102144265\",\"welcomeWord\":\"welcome my kingd\",\"loginName\":\"15102144265\",\"email\":null,\"ip\":null,\"lastLoginTime\":\"2014-07-22 04:10:50\",\"destId\":null,\"relateId\":\"50001629\",\"unionFlag\":\"0\"}}";          
            //反序列化JSON
            Dictionary<string, string> _dic2 = JsonConvert.DeserializeObject<Dictionary<string, string>>(jsontest);
            if (_dic2.Count > 0)
            {
                string id = "", data = "", userid = "";
                //取值
                _dic2.TryGetValue("id", out id);
                _dic2.TryGetValue("data", out data);
                _dic2.TryGetValue("userid", out userid);
            }

能不能像这样,直接读取出来的,一层的大括号是可以的读取的,两层就不是很清楚了。

支持(0) 反对(0) 十里外教堂 | 园豆:71 (初学一级) | 2014-07-22 17:18

@十里外教堂: 不行的,这种东西是没办法通用的,你去了解一下json格式吧.

json外层有2种可能,数组和对象.当外层为对象时才可以像你这样用keyvalue来解析,外层要是为数组,这个keyvalue就解析不了.你可以尝试下dcitonary<string,动态对象>

支持(0) 反对(0) 吴瑞祥 | 园豆:29449 (高人七级) | 2014-07-22 17:48
0

Jayrock 用这个吧。

forhells | 园豆:724 (小虾三级) | 2014-07-22 17:46

第一次用 Jayrock,但是得到的对象时空的。不清楚是怎么回事

支持(0) 反对(0) 十里外教堂 | 园豆:71 (初学一级) | 2014-07-22 20:27
0

json.net

wolfy | 园豆:2636 (老鸟四级) | 2014-07-22 20:20

json.net 好像也是需要建实体类的吧! 

支持(0) 反对(0) 十里外教堂 | 园豆:71 (初学一级) | 2014-07-22 20:37

@十里外教堂: 不需要建实体类

支持(0) 反对(0) wolfy | 园豆:2636 (老鸟四级) | 2014-07-22 20:44

@wolfy: 能不能详细的给我说说。

支持(0) 反对(0) 十里外教堂 | 园豆:71 (初学一级) | 2014-07-22 20:45

@十里外教堂: http://www.cnblogs.com/wolf-sun/p/3671792.html你可以看看我这篇文章,之前搜集的

支持(0) 反对(0) wolfy | 园豆:2636 (老鸟四级) | 2014-07-22 20:46

@wolfy: 使用linq to Json 的方式

支持(0) 反对(0) wolfy | 园豆:2636 (老鸟四级) | 2014-07-22 20:47

@wolfy: 好的,谢谢

支持(0) 反对(0) 十里外教堂 | 园豆:71 (初学一级) | 2014-07-22 20:54

@wolfy: 我一个一个的取值,是都可以得到的。但是我想试试这个,报错了。

支持(0) 反对(0) 十里外教堂 | 园豆:71 (初学一级) | 2014-07-22 21:28

@十里外教堂: 格式不一样 ,只能单个取了,我那个后面是一个数组

支持(0) 反对(0) wolfy | 园豆:2636 (老鸟四级) | 2014-07-23 10:10
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册