【美乙最新新闻】美乙直播|赛程表|积分榜|排名|资料库

美乙

用原始方法解析复杂字符串,json一定要用JsonMapper么

1.不规则非json字符串

先看看这个例子,字符串是连在一起,没有换行的,为了方便观察,换行了,程序是原始在一起的:

[11101630,1532,14,’0′,’0′,3,’2015,4,23,16,05,48′,’4′,1,2,0,0],

[11101631,1532,14,’0′,’0′,3,’2015,4,23,16,09,48′,’0′,,,0,0],

[11101632,1532,14,’0′,’0′,3,’2015,4,23,16,03,10′,’1′,2,2,0,0]

先来分析一下这个字符串的特点,才能找到思路哦:

1.每一组数据都是在[]括号对中,每一组数据用,号分割,所以最终要形成一个数组来访问哦。

2.每一组的数据基本都是用 , 号分割,字符串类型还有单引号 ;

3.第7个数组是一个整体,也使用,号分割,整体是字符串有引号;

4.第2组数据有空值,直接用,号分割,所以splite的时候不能去掉空值,否则数组长度不一样,定位就乱了。

既然分析都完了,那思路呢?

1.组直接分割使用 ], 标记,然后每一组要Repalce掉 [ 和 ] 。主要是最前和最后;

2.组内分割,使用 ,号标记分割,出来之前要把单引号给 替换掉 ;不然也是作为字符串,引号也包括进去了;

3.至于那个 数组 的处理,不能过于想复杂,分割之后,直接在最后增加1个元素,将固定位置7-12的组合起来;这样也许方便点;

4.由于空值有占位,所以每一组的长度是固定的。所以处理的时候直接根据自己想要的位置来组合。

下面看看代码了,C#版本,相对与一行代码,仔细看,Linq很是一个神器,真的是神奇。。。说多了都是泪,为啥就没早点学呢:

String str = @”[11101630,1532,14,’0′,’0′,3,’2015,4,23,16,05,48′,’4′,1,2,0,0],[11101631,1532,14,’0′,’0′,3,’2015,4,23,16,09,48′,’0′,,,0,0],[11101632,1532,14,’0′,’0′,3,’2015,4,23,16,03,10′,’1′,2,2,0,0]”;

var result = str.Split(new string[] { “],” }, StringSplitOptions.None) //先整体分割组

.Select(n => n.Replace(“[“, “”) //以下是组内分割,并去掉其他干扰字符

.Replace(“]”, “”)

.Replace(“\'”, “”)

.Split(‘,’).ToList())

.Select(n => //对中间一个整体单独提取,进行组合,单独增加一个元素

{

n.Add(String.Format(“{0},{1},{2},{3},{4},{5}”, n[6], n[7], n[8], n[9], n[10], n[11]));return n;

}).ToList();

看看结果怎么样:

2.键值对字符串分割函数

由于json数据格式都是键值对字符串,所以这里特意分享一个经常用到的分割函数,不用Json组件,那就用简单的方法做一个。这个函数来源于 Newlife.Core ,是 X组件 的重要部分。源码部分不过多解释,就是按规则将键值对直接分割保持在字典中,使用方法大家可以自己实验一下,或者参考下面的案例,都有用到这个方法。代码如下,为了方便使用,写成了扩展方法:

public static class StringHelper

{

/// <summary>拆分字符串成为名值字典</summary>

/// <param name=”str”>要分割字符串的</param>

/// <param name=”nameValueSeparator”>键值对的分隔符</param>

/// <param name=”separators”>分割字符</param>

/// <returns>键值对字典</returns>

public static IDictionary<String, String> SplitAsDictionary(this String str, String nameValueSeparator = “=”, params String[] separators)

{

var dic = new Dictionary<String, String>();

if (String.IsNullOrWhiteSpace(str)) return dic;

if (String.IsNullOrEmpty(nameValueSeparator)) nameValueSeparator = “=”;

if (separators == null || separators.Length < 1) separators = new String[] { “,”, “;” };

String[] ss = str.Split(separators, StringSplitOptions.RemoveEmptyEntries);

if (ss == null || ss.Length < 1) return null;

foreach (var item in ss)

{

Int32 p = item.IndexOf(nameValueSeparator);

// 在前后都不行

if (p <= 0 || p >= item.Length – 1) continue;

String key = item.Substring(0, p).Trim();

dic[key] = item.Substring(p + nameValueSeparator.Length).Trim();

}

return dic;

}

}

上面默认的键值对分割符号为 = 号,根据实际情况进行修改,json格式里面一般是:冒号比较多。

3.复杂Json格式的字符串

上面的例子比较简单,这次看一个稍微复杂点的,虽然可能用JsonMapper可以很轻易做到,但试一下最原始的方法吧。还是按照上面的思路,先分析字符串的特点: 字符串是连在一起,没有换行的,为了方便观察,换行了,程序是原始在一起的:

{1074:[‘墨联’,’墨联’,’MEX D1′,’#098000′,’98’],

2100:[‘美乙’,’美乙’,’USL D2′,’#E89B10′,’98’],

1024:[‘阿甲’,’阿甲’,’ARG’,’#00CCFF’,’98’],

1052:[‘哥伦甲’,’哥伦甲’,’COLCMA’,’#888500′,’98’],

1028:[‘K联赛’,’K联赛’,’KORL’,’#F75000′,’98’],

1297:[‘球会友谊’,’球会友谊’,’CF’,’#5691D8′,’98’],

2085:[‘奥女甲’,’奥女甲’,’AFB’,’#D86220′,’97’]}

还是先分析特点,这个格式应该是json类似的了,比较规则:

组与之间是使用 , 号分割;前后有{}括号对;观察前后可以使用 ], 字符串将组分开;

键 是整数,键值是通过 : 号分割;

值是一个数组,有5个元素,通过 , 号分割

都有单引号,需要过滤掉;其他没有特殊情况;

代码解决过程:

string text = @”{1074:[‘墨联’,’墨联’,’MEX D1′,’#098000′,’98’],2100:[‘美乙’,’美乙’,’USL D2′,’#E89B10′,’98’],1024:[‘阿甲’,’阿甲’,’ARG’,’#00CCFF’,’98’],1052:[‘哥伦甲’,’哥伦甲’,’COLCMA’,’#888500′,’98’],1028:[‘K联赛’,’K联赛’,’KORL’,’#F75000′,’98’],1297:[‘球会友谊’,’球会友谊’,’CF’,’#5691D8′,’98’],2085:[‘奥女甲’,’奥女甲’,’AFB’,’#D86220′,’97’]}”;

var dic = text.Replace(“\'”, “”).Split(new String[]{“],”}, StringSplitOptions.None) //先组分割

.Select(n => n.Replace(“{“, “”).Replace(“}”, “”) //将组里面的干扰字符过滤掉

.Replace(“[“, “”).Replace(“]”, “”)

.SplitAsDictionary(“:”, “\””) //键值对处理,冒号分隔符

.ToDictionary(t => t.Key, t => t.Value.Split(‘,’)//值再次进行分割,形成数组

)).ToArray();

看看结果如何:

相声段子师胜杰的帮我想名叫什么!

我想有个家

(相声)

甲:逗哏 乙:捧哏

甲:今天的节目可是丰富多彩

乙:可谓是名家绘粹

甲:可遗憾的是有首歌没人唱

乙:什么歌呀

甲:我想有个家

乙:我会唱呀(想要有个家,一个不需要华丽的地方,当我离家的……)

甲:停停 !别唱了

乙:怎么了

甲:你先找个气筒子打足气再唱

乙:你这是怎么说话呢?

甲:人家这是一首女生独唱

乙:男的不能唱?

甲:男的可以唱

乙:还是的

甲:得把词改了

乙:怎么改呀

甲:(我怕有个家,一个男子汉害怕的地方,当我受惊的时候,我会更加害怕。虽然没有家,但我更潇洒,轻松又自在,没有牵挂。只要生活能幸福,不管谁说啥,永远不结婚,永远不成家。女人,三有拉拉!

乙:呵!你这都是什么词呀!

甲:哎—我唱出了当代男人的心里话,你看刚才鼓掌的男同胞都有同感。

乙:行行行,男人为啥就怕有家呢?

甲:有家,首先你得结婚吧

乙:恩

甲:结婚你得娶媳妇吧

乙:多新鲜呀!

甲:过去结婚那是简简单单

乙:对

甲:现在结婚是大操大办,小伙子结婚办事等于拘留半个月

乙:啊!你别先看这个呀

甲:看什么呀

乙:等你有了孩子,你更能体会家庭生活的温暖。

甲:哎呦,太对了

乙:你看

甲:有了孩子,你就算是判了无期徒刑了

乙:哦!我说这至于吗?

甲:至于吗?你没体会?有了孩子以后,你得联系幼儿园、托儿所,上学你得送,放学你得接,你瞧瞧。

乙:我的孩子不是太小吗?

甲:小?他怎么知道给女同学写情书呀

乙:恩?你说我这儿子真不给争气

甲:不给你争气,他可给你争活呢

乙:争什么活?

甲:你忘了,你儿子他们学校操场上的旗杆的滑轮坏了。老师问:“同学们,谁的爸爸能爬上去修一下呀”你儿子站起来了“老稀,我爸爸能爬

乙:好吗,他把我豁出去了

甲:当天晚上你来到操场一看。哎呦我的妈呀,就这旗杆 35米高啊

乙:那也得爬呀

甲:怎么了?

乙:不爬?儿子在地下打滚

甲:你爬了半个多小时,实在爬不动了,你往上一看那,不着急了

乙:怎么不着急呢?

甲:35米的旗杆,你离那滑轮……

乙:还有多少?

甲:还有34米

乙:我就怕一米呀!

甲:你说你当个爸爸难不难?

乙:不过,家庭夫妻是两口子,可以替你分忧。

甲:按道理是这样的,可是现在有的妻子不理解丈夫,他认为你是男子汉,你受累应该。你苦恼应该。

乙:哪有这样的妻子?

甲:就说你妻子吧。结婚前对你怎么样?

乙:好!

甲:今天给你勾个手套、明天给你勾个围脖、后天给你勾个帽子,没过几天就把你勾跑了。

乙:嘿嘿……

甲:结婚的时候,你们俩站在一起。你一米七四,你爱人也就一米四七

乙:她有这么矮吗

甲:可你爱人说了

乙:她说什么了?

甲:矮怎么了?我们是女人呀,我们女人优点是优点,缺点也是优点

乙:那你这女人矮是什么优点呀?

甲:那是小巧玲珑

乙:那女人长的高呢?

甲:是亭亭玉立

乙:女人胖

甲:是丰满

乙:女人瘦

甲:是苗条

乙:女人爱打扮

甲:是天性

乙:女人不打扮

甲:是朴素

乙:女人活泼

甲:是大方

乙:女人沉默

甲:是文静

乙:女人外向

甲:现代美

乙:女人内向

甲:古典美

乙:女人勤快

甲:是贤惠

乙:女人懒惰(加重音起强调)

甲:是社会地位提高了

乙:啊!好吗!真都是优点。

甲:你说你爱人这么多优点。结婚以后怎么样?

乙:我们不错呀

甲:还不错?就我们这位李先生

乙:怎么了

甲:他是里里外外一把手,上班干事业、下班忙家务、晚上不能睡的早,早上不能起的晚、上班不能给女人说话、下班必须早回家、银行里不能有自己的存款、口袋里不能有节余的零钱、喝酒只能进饭馆、抽烟必须蹲厕所。

乙:我这受管制呢?

甲:你说你这活着累不累呀

乙:我不累

甲:哦!不累

乙:上班干事业,那是我的工作

甲:那下班忙家务呢

乙:我业余爱好

甲:晚上不能睡的早

乙:睡早了我失眠

甲:早上不能起的晚

乙:起晚了影响我锻炼

甲:上班不能和女人说话

乙:给女人说话我闹心

甲:下班必须早回家

乙:晚喽,怕女流氓截我

甲:呵!这人可真有词

乙:那当然

甲:那银行里不能有自己的存款

乙:钱多了太麻烦

甲:口袋里不能有节余的零钱

乙:丢了划不来呀

甲:喝酒只能进饭馆

乙:饭馆喝酒过瘾

甲:抽烟必须蹲厕所

乙:我就爱抽混合型的

甲:你这么说话你就不违心吗

乙:违心也得这么说

甲:哦

乙:要不让人笑话

甲:碰上这样的妻子是不是等于判了你死刑了呀

乙:别介呀,实在不行还可以离婚呀

甲:离婚?上贼船容易下贼船难呀

乙:有什么难的呀

甲:那你怎么不离呀

乙:我觉得我们感情不错

甲:哦!是吗

乙:你看,我离开她十分钟就想,见了她两分钟就烦

甲:也不怎么样呀

乙:居家过日子碗勺没有不碰锅沿的。咱是男子汉。咱忍着点

甲:那你打算怎么忍 呀

乙:我跟她分居呀。她住东屋,我住西屋。我不理她

甲:你不理她,她可理你呀

乙:是吗?

甲:一边做饭一边对着你唱

乙:她是有着毛病

甲:(香喷喷的大米饭,肉丸子酸辣汤,对面里的陈世美,让你馋的慌,要想把婚离呀,纯粹是妄想,离来离去,离来离去,各屁着凉,哦……

乙:行了,你就别哦哦了

甲:当时把你气的浑身直哆嗦,你也唱上了

乙:我唱什么呀

甲:(眼泪汪汪,我要说句心里话,又想又怕这个家,女人自有女人的苦,男人也有难说的话。

乙:都不容易

甲:论打论骂,咱都不怕

乙:对

甲:从今 以后

乙:怎么样?

甲:你是我的妈

乙:啊!

小品反义词台词

原发布者:GraspingJT

同学:老师,早上好!老师:只说早上好,那我下午呢?难道就不好了吗?同学:老师下午好!老师:那我晚上呢?同学:老师晚上也好!老师:对,这才像话嘛!现在你们重新喊一遍。同学:老师早上好!下午好!晚上也好!老师:哎,好,坐下!今天我们来复习反义词。这样练习,我说一句,你们大声说出反义词。下面我们开始。今天天气很好。同学:今天天气很坏。老师:到处阳光明媚。同学:到处阴云密布。老师:马路上人山人海。同学:马路上空无一人。老师:年轻。同学1:年老。(上前表演咳嗽)老师:站立同学2:横倒(表演摔倒)老师:有位年轻人站立在路上。同学3:有位老年人躺在路上。(表演横躺)老师:我捡了一元钱。同学4:我丢了一元钱。(表演丢钱)老师:我捡了一元钱交给老师。同学:我丢了一元钱去老师。老师:错误,不能这样说。同学:正确,应该这样说。老师:错误。同学:正确。老师:这样不行。这是违法行为。同学:这样可以,这是合法行为。老师:我说错误。同学:我们说正确。老师:听老师的,老师说的才是正确的。同学:听我们的,老师说的都是错误的。老师:你们愚蠢!同学:我们聪明!老师:停止!同学:继续。老师:现在你们停止。停止!别说了。同学:现在我们继续,还要说。老师:你们都是蠢猪,你们停止。同学:我们都是天才,我们继续。老师:你,你,你们听老师的。(手指全体学生)同学:老师听我们的。(学生指向自己)老师:学生都得听老师的。同学:老师都得听学

为您推荐

发表评论

更新日期:2025-07-15 19:29:18
联系我们

联系我们

在线咨询: QQ交谈

邮箱: 1821497181@qq.com

工作时间:周一至周五,10:00-18:30,节假日休息
返回顶部