C#用啥方法可以读取以下字符串各个字段的值?(特急!)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#用啥方法可以读取以下字符串各个字段的值?(特急!)相关的知识,希望对你有一定的参考价值。

"retcode":0,"result":"uinlist":["face":534,"sex":2,"nick":" 瑰","age":32,"province":"广西","uin":1374228505,"stat":10,"country":"中国","city":"南宁","face":540,"sex":1,"nick":"凌度空间","age":25,"province":"广西","uin":1527330037,"stat":10,"country":"中国","city":"南宁","face":585,"sex":1,"nick":"一生何求","age":37,"province":"广西","uin":1004108457,"stat":10,"country":"中国","city":"南宁","face":579,"sex":2,"nick":"☆爱□☆宝☆贝☆","age":17,"province":"广西","uin":1257208490,"stat":10,"country":"中国","city":"南宁","face":108,"sex":2,"nick":"下一个我","age":17,"province":"广西","uin":1677509571,"stat":10,"country":"中国","city":"南宁","face":105,"sex":1,"nick":"相识是缘分","age":21,"province":"广西","uin":534578969,"stat":10,"country":"中国","city":"南宁","face":540,"sex":2,"nick":"丶幸福的旋律","age":34,"province":"广西","uin":1005457336,"stat":10,"country":"中国","city":"南宁","face":597,"sex":1,"nick":"真的好想你","age":27,"province":"广西","uin":1543905361,"stat":10,"country":"中国","city":"南宁","face":255,"sex":2,"nick":"芡祢的手许下承诺","age":21,"province":"广西","uin":1490230714,"stat":10,"country":"中国","city":"南宁","face":669,"sex":1,"nick":"缳、(@)一辈","age":40,"province":"广西","uin":1757507004,"stat":10,"country":"中国","city":"南宁"],"count":10,"page":0,"endflag":0
最好能给出具体的C#代码,谢谢!

可以用正则表达式提出来
string str = "你那段代码";
Regex reg = new Regex(@"\""face"":(\d+),""sex"":(\d+),""nick"":""(\w+)"",""age"":(\d+),""province"":""(\w+)"",""uin"":(\d+),""stat"":(\d+),""country"":""(\w+)"",""city"":""(\w+)""\");
MatchCollection mc = reg.Matches(str);
foreach (Match m in mc)

//
string face = m.Groups[1].ToString();
string sex = m.Groups[2].ToString();
string nick = m.Groups[3].ToString();
string age = m.Groups[4].ToString();
string province = m.Groups[5].ToString();
string uin = m.Groups[6].ToString();
string stat = m.Groups[7].ToString();
string country = m.Groups[8].ToString();
string city = m.Groups[9].ToString();

// 数据读出来,如果以后要用,就存到一个数组里去
追问

不错,受教了!不过还有个问题:好像是某个字段含有空格(也可能是像个空格的字符)时,这一组数据就读不出来了,怎么办呢?

追答

改下正则表达式
Regex reg = new Regex(@"\""face"":(\d+|\s0,),""sex"":(\d+|\s0,),""nick"":""(\w+|\s0,)"",""age"":(\d+|\s0,),""province"":""(\w+|\s0,)"",""uin"":(\d+|\s0,),""stat"":(\d+|\s0,),""country"":""(\w+|\s0,)"",""city"":""(\w+|\s0,)""\");

你试下看行不行,我没开软件试的

追问

好像也不行啊,我每次的数据有10组,可提取出来的经常达不到10组

追答

你设下断点是哪几个取不到,我试了一下,都行

参考技术A JSON,一种轻量级的javascript数据格式。
JSON有个专用dll,Newtonsoft.Json.dll ,
引入命名空间 具体方法如下
string jsonStr="以上数据";
JObject json = JObject.Parse(jsonStr);
string age=json["age"].Value<string>();追问

这个好像也不错,只是懒得额外引入其他DLL了

追答

这个才是个解决方案,既然是JSON,那么当然有它的专属解析器.没有什么比它更好用,效率更高的方式了.以上几位说的方法虽然行得同,但是难免会出错,
而且,麻烦,效率也低.JSON已经逐渐形成1种数据格式的标准.用它是很有必要的.

追问

这个Newtonsoft.Json.dll ,是不是版本太多了?我下了一个2.0版本,没发现有JObject类啊,郁闷

追答

现在最新版本是3.5

参考资料:http://baike.baidu.com/view/136475.htm

参考技术B 是Json,C#好像没提供什么方法,我以前是这么写的,先替换掉所有的 "然后用,号分隔就搞定了 参考技术C 自己搜 json。 参考技术D 同意楼上的

属性和字段

在做题时,我一直在想字段的属性到底有什么不同,功能都基本一样,但是后来网上查了查,原来类成员包括变量和方法,如果希望其他类能够访问成员变量的值,就必须定义成公有的,而将变量设为公有public,那这个成员变量的就可以被任意访问(包括修改,读取),这样不利于数据安全。 C#通过属性特性读取和写入字段(成员变量),而不直接直接读取和写入,以此来提供对类中字段的保护。属性可用于类内部封装字段。属性是C#面向对象技术中封装性的体现。

属性和字段的区别:

  • 属性是逻辑字段,是字段的扩展,并不占用实际的内存;而字段占用内存空间。(这是很重要的区别)
  • 属性可以被其他类访问;而非public的字段不能被直接访问。
  • 属性可以对接受的数据在范围上做限定;而字段不能。

使用属性的情况:

  • 要求字段只能读或者只能写;
  • 需要限制字段的取值范围;
  • 在改变一个字段的值的时候希望改变对象的其它一些状态; 

使用字段的情况:

  • 允许自由读写;
  • 取值范围只受数据类型约束而无其他任何特定限制;
  • 值的变动不需要引发类中其它任何成员的相应变化。

技术分享

 

以上是关于C#用啥方法可以读取以下字符串各个字段的值?(特急!)的主要内容,如果未能解决你的问题,请参考以下文章

C#属性访问器

C#中 sqlDataRead 的三种方式遍历读取各个字段数值

C#属性和字段

oracle update语句将一个语句的查询结果作为set值怎么做?【特急】

用JAVA完成一个二进制文件的解析-特急!(还有副件没地方放了,这是我的qq1032766359,我会发给你)

新手python,用啥方法可以修改元组里的值