如何在C#中解析特定的字符串

时间:2016-08-03 09:19:06

标签: c# json parsing

我有这个结构:

{
   "longUrl" :"http://www.sample.com",
   "bok" :1,
   "url" :"http://pleasegetme.com ",
   "title" :""
}
//equivalent
    "{
       \n   \"longUrl\" :\"http://www.sample.com/\",
       \n   \"bok\" :1,
       \n   \"url\" :\"http://pleasegetme.com \",
       \n   \"title\" :\"\"\n
     }"

我有这个功能

public string Domain1Helper(string longText)
{
    Regex rgxUrl = new Regex("\"url\":\"(.*?)\"");
    Match mUrl = rgxUrl.Match(longText);

    string url = Regex.Replace(mUrl.Groups[1].Value, @"\\", "");
    return url;
}

我想得到的是http://pleasegetme.com

我的Domain1Helper方法有什么问题?

4 个答案:

答案 0 :(得分:2)

你有一个JSON字符串。您可以使用名为Json.Net的库来解析此问题。你可以找到这个nuget包。然后,您可以使用以下代码挑选出您想要的字符串。

var entity = new class {
    constructor(name) { this.name = name; }
    getName() { return this.name; }
}('Foo');
console.log(entity.getName()); // Foo

答案 1 :(得分:1)

AJB,您的RegEx中有错误。 话虽这么说你应该使用JSON反序列化器,如JSON.NET。 在函数Domain1Helper中它应该是:

Regex rgxUrl = new Regex("\"url\"\\s+:\"(.*?)\"");

注意\ s +?

答案 2 :(得分:0)

这是一个怪异的JSON格式字符串。使用JSON反序列化器,如JSON.NET。我会告诉你你想要使用哪一个。

这是使用json2csharp.com生成的根对象

public class RootObject
{
    public string longUrl { get; set; }
    public int bok { get; set; }
    public string url { get; set; }
    public string title { get; set; }
}

使用JSON.NET的示例:

using Newtonsoft.Json; // Namespace is something like this


string json = "{
                 \n   \"longUrl\" :\"http://www.sample.com/\",
                 \n   \"bok\" :1,
                 \n   \"url\" :\"http://pleasegetme.com \",
                 \n   \"title\" :\"\"\n
               }";

RootObject rootObject = JsonConvert.DeserializeObject<RootObject>(json);
string url = rootObject.url;
// Do something with the url

答案 3 :(得分:0)

您已包含转义字符串\。如果删除它们,它应该解析得很好,如下所示:

https://regex101.com/r/hK7xR7/1

请注意,您的方法应如下所示:

public string Domain1Helper(string longText)
{
    Regex rgxUrl = new Regex(@"\"url\" :\"(.*?)\"");
    Match mUrl = rgxUrl.Match(longText);

    string url = Regex.Replace(mUrl.Groups[1].Value, @"\\", "");
    return url;
}

另一种解决方案是使用一个json库,如下所述:https://msdn.microsoft.com/en-us/library/cc197957(v=vs.95).aspx