最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

正則表達(dá)式搭配js輕松處理json文本方便而老古

 更新時(shí)間:2013年02月17日 11:19:41   作者:  
如何解析Json已經(jīng)成為了眾多業(yè)內(nèi)人士談?wù)摰慕裹c(diǎn),依我看,要解析輕量化類型json,用.net自帶的類庫就可以勝任了,有一種看起來更方便的老古董——正則表達(dá)式,處理json是綽綽有余,感興趣的你可不要錯(cuò)過了哈

很多群里的朋友經(jīng)常聊到如何解析Json,通常很多人都會搬出他們珍藏的dll出來,比如Newtonsoft.json.dll,litjson.dll等等?;ハ啻祰u這些動態(tài)鏈接庫的功能如何如何了得,依我看,要解析輕量化類型json,用.net自帶的類庫就可以勝任了。但是,有一種看起來更方便的老古董——正則表達(dá)式,處理json是綽綽有余。

Json(JavaScript Object Notation)作為當(dāng)今互聯(lián)網(wǎng)最為一種流行的,超越語言的網(wǎng)絡(luò)數(shù)據(jù)交換格式,可以說是“肉多骨少”的一種類型,在網(wǎng)絡(luò)傳輸方面大有趕超xml作為傳統(tǒng)傳輸格式的地位,其在REST架構(gòu)上的應(yīng)用隨著騰訊,淘寶等巨型網(wǎng)絡(luò)公司的推波助瀾,而成為程序員追捧的理想格式。

然而,雖然json在javascript里解析起來輕而易舉,但是在.net里卻沒那么容易。即使微軟在.NET Framework 3.5中提供了一個(gè)JSON對象的序列化工具(System.Web.Script.Serialization.JavaScriptSerializer),但其本身的強(qiáng)類型屬性,讓人望而卻步。

還好,有正則表達(dá)式!

正則表達(dá)式

首先申明一下,正則表達(dá)式是一直紙老虎,根本就不難。首先讓我們搬出一個(gè)正在表達(dá)式在.net中的實(shí)現(xiàn)例子。

有這么一段json格式的文本,從右下圖可以清除地看出其結(jié)構(gòu):

復(fù)制代碼 代碼如下:

{
People: [
{
Name: "zhangsan",
Age: 12,
Married: false
},
{
Name: "lisi",
Age: 24,
Married: true
},
{
Name: "wangwu",
Age: 40,
Married: true
}
]
}

在c#中要想用正則提取出上述文本里面的有用信息,必須添加支持正則表達(dá)式的組件引用。
復(fù)制代碼 代碼如下:

using System.Text.RegularExpressions;

復(fù)制代碼 代碼如下:

static void Main(string[] args)
{
string json = "{People:[{Name:\"zhangsan\",Age:12,Married:false},{Name:\"lisi\",Age:24,Married:true},{Name:\"wangwu\",Age:40,Married:true}]}";
Regex regex = new Regex(@"Name:\s*""(?'Name'[^""]*)"",\s*Age:\s*(?'Age'[^,]*),\s*Married:\s*(?'Married'[^\}]*)", RegexOptions.IgnoreCase);
//申明和實(shí)例化一個(gè)正則表達(dá)式對象,這里要加上參數(shù)RegexOptions.IgnoreCase,用于忽略文本大小寫
if (regex.IsMatch(json))
{
MatchCollection matches = regex.Matches(json);
//上處可以匹配文本里有多組相似的結(jié)果全部結(jié)果,如果只有一組的話,用Match match = regex.Match(json);
StringBuilder stringBuilder = new StringBuilder();
foreach (Match match in matches)
{
string name = match.Groups["Name"].Value;//此處Name是匹配表達(dá)式(?'Name'[^"]*)里的Name,顯式分組
string age = match.Groups["Age"].Value;
string married = match.Groups["Married"].Value;
stringBuilder.AppendFormat("Name:{0},Age:{1},Married:{2}\n", name,age,married);
}
Console.WriteLine(stringBuilder.ToString());
}
else
{
Console.WriteLine("提取文本失??!");
}
Console.Read();
}

如果匹配正確,結(jié)果會是如圖所示:

很多新手都不知道這些步驟怎么來的。在這里我先向大家推薦一款正則表達(dá)式測試的小工具。由于是特別針對c#的,所以用起來真的很方便。至于下載地址百度一下就知道了!

 

這上面的匹配符讓我介紹一下。

\s 匹配一個(gè)空格    * 匹配次數(shù)(這里是無限次,甚至是一次也沒有){1,}是至少匹配一次或一次以上

\w匹配一個(gè)字母或是數(shù)字  \.這是匹配任何一個(gè)字符 

\d匹配一個(gè)數(shù)字,不包括前面的正負(fù)符號

()隱式分組   (?'groupname'\w)或者(?<groupname>\w)匹配一個(gè)字符的顯式分組,包含了一個(gè)組名groupname,可以自己隨便起名字。

[^\w]這里面的^是匹配除^后面出現(xiàn)的字符的所有字符。比如匹配 name:"haha123",要匹配這里面的haha123,就可以這樣:name:"(?'name'[^"]*)表示匹配除"的所有字符haha123

其實(shí)正則表達(dá)式真正常用的也就是上面那幾個(gè)了。會了的話正則表達(dá)式就輕松掌握了。

接下來還給大家介紹一種解析json的方法。那就是在.net調(diào)用javascript的腳本。

調(diào)用Javascript

這是一種被人忽略的方法,其實(shí)用這種方法解析起來貌似比上面的正則表達(dá)式更快速。

大家都知道,在json只是javascript里一種單獨(dú)列出來的玩意,其語法遵循js,因此用js來原生態(tài)地處理json是最好不過了。

復(fù)制代碼 代碼如下:

using Microsoft.JScript;
using Microsoft.Vsa;
using Microsoft.JScript.Vsa;

復(fù)制代碼 代碼如下:

public static Dictionary<string, string> GetMyValue(string jsonSource, string key1, string key2)
{
Dictionary<string, string> dic = new Dictionary<string, string>();
string jsonStr = "function handleJson() {var j=" + jsonSource + ";var arr1=new Array();var arr2=new Array();for(var " + key2 + " in j." + key1 + ") arr1.push(" + key2 + "); return arr1;} handleJson(); ";
object o = Eval.JScriptEvaluate(jsonStr, VsaEngine.CreateEngine());
ArrayObject arr = (ArrayObject)o;
for (var i = 0; i <= (int)arr.length - 1; i++)
{
dic.Add(arr[i].ToString(), arr[i].ToString());
}
return dic;
}

這里的代碼是我以前做項(xiàng)目的時(shí)候臨時(shí)寫的,很亂,大家將就著看看。只是作為一種可行的方法,并不推薦大家用這種方法。有時(shí)間大家試試看。

教程每天都更新,歡迎大家繼續(xù)關(guān)注!

相關(guān)文章

  • 把普通對象轉(zhuǎn)換成json格式的對象的簡單實(shí)例

    把普通對象轉(zhuǎn)換成json格式的對象的簡單實(shí)例

    下面小編就為大家?guī)硪黄哑胀▽ο筠D(zhuǎn)換成json格式的對象的簡單實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-07-07
  • IE8 原生JSON支持

    IE8 原生JSON支持

    你可能已經(jīng)從這篇文章的標(biāo)題中猜到了,Internet Explorer 8(目前是Beta2)提供了原生JSON的解析和序列化。
    2009-04-04
  • 利用json獲取字符出現(xiàn)次數(shù)的代碼

    利用json獲取字符出現(xiàn)次數(shù)的代碼

    之前看到一篇博客,列出一個(gè)字符串中每個(gè)字符出現(xiàn)的次數(shù),后來想想可以不可以用json來實(shí)現(xiàn)呢,結(jié)果當(dāng)然是可以的,廢話就不多說了
    2012-03-03
  • json簡單介紹

    json簡單介紹

    我們知道AJAX技術(shù)能夠使得每一次請求更加迅捷,對于每一次請求返回的不是整個(gè)頁面,也僅僅是所需要返回的數(shù)據(jù)。
    2008-06-06
  • 寫給小白學(xué)習(xí)的地理信息的表示法GeoJSON

    寫給小白學(xué)習(xí)的地理信息的表示法GeoJSON

    這篇文章主要為大家介紹了寫給小白學(xué)習(xí)的地理信息的表示法GeoJSON的詳細(xì)實(shí)例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • XENON基于JSON變種

    XENON基于JSON變種

    JSON已經(jīng)成為了現(xiàn)在互聯(lián)網(wǎng)上輕量級數(shù)據(jù)傳輸?shù)氖聦?shí)標(biāo)準(zhǔn),現(xiàn)在已經(jīng)很少聽說哪個(gè)流行的web API不支持JSON了,而很多內(nèi)部或者專用的應(yīng)用程序也都在使用JSON來傳遞數(shù)據(jù)。
    2010-07-07
  • JSON schema配置規(guī)范使用教程

    JSON schema配置規(guī)范使用教程

    這篇文章主要為大家介紹了JSON schema配置規(guī)范使用教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • json編寫簡單一例

    json編寫簡單一例

    主要是了解一下json的簡單寫法與應(yīng)用,方便想學(xué)習(xí)json的朋友
    2008-08-08
  • ASP Json Parser修正版

    ASP Json Parser修正版

    之前因?yàn)橐胘son,在網(wǎng)上,json Generator就不少,但是,parser鮮有后來,在一個(gè)老外的啟發(fā)下,寫了一個(gè)praser,其實(shí)超簡單,就是利用了JS的eval來parse,然后,把對象再返回給vbscript代碼。
    2009-12-12
  • jQuery 遍歷json數(shù)組的實(shí)現(xiàn)代碼

    jQuery 遍歷json數(shù)組的實(shí)現(xiàn)代碼

    看到網(wǎng)上有很多朋友問遍歷json數(shù)組的代碼,腳本之家特為大家整理了一些,需要的朋友可以看下。
    2010-03-03

最新評論

板桥市| 凉城县| 和顺县| 纳雍县| 玛曲县| 南川市| 天镇县| 克东县| 延长县| 河南省| 沐川县| 孝昌县| 高密市| 镇平县| 繁昌县| 桂东县| 鄂托克前旗| 徐汇区| 磴口县| 华坪县| 呼伦贝尔市| 马鞍山市| 兰考县| 高淳县| 吉木乃县| 县级市| 裕民县| 周口市| 缙云县| 平舆县| 会东县| 岳池县| 焦作市| 南通市| 康马县| 洪湖市| 新绛县| 图木舒克市| 会昌县| 镇江市| 汾阳市|