如何在 C# 中解析一个字符串示例

3

我有这个字符串

[
    {
        "url_short":"http:\/\/sample.com\/8jyKHv",
        "url_long":"http:\/\/www.sample.com\/",
        "type":0
    }
]

我想要的是将http:\/\/sample.com\/8jyKHv转换成

http://sample.com/8jyKHv

这是可能的吗?


你在这里有两个选择。第一种是将其视为字符串,使用子字符串和替换功能。第二种是将其视为JSON,将其反序列化为类对象。两种方法都会产生所需的结果。 - Dieter B
2
请参考https://dev59.com/iGgu5IYBdhLWcg3winc3中的JSON反序列化方法,我建议使用该方法而不是使用子字符串解决方案。 - Dieter B
强烈推荐使用JSON方式,而不是字符串/子字符串/替换方法。 - Gil Sand
4个回答

4

这个字符串是JSON格式的。

你可以使用JSON.NET来解析它。

例如:

using System;
using System.Collections.Generic;
using Newtonsoft.Json;

public class RootObject
{
    public string url_short { get; set; }
    public string url_long { get; set; }
    public int type { get; set; }
}

public class Program
{
    static public void Main()
    {
        string j = "[{\"url_short\":\"http:\\/\\/sample.com\\/8jyKHv\",\"url_long\":\"http:\\/\\/www.sample.com\\/\",\"type\":0}]";

        List<RootObject> ro = JsonConvert.DeserializeObject<List<RootObject>>(j);

        Console.WriteLine(ro[0].url_short);                 
    }    
}

Response:

http://sample.com/8jyKHv


3

请尝试以下操作:

创建如下类:

``` 注意: 您可以在Visual Studio中使用Paste Special选项来生成与JSON相关的所有类。 编辑 -> Paste Special -> Paste Json As Classes ```

这将创建与JSON相关的所有类。

    public class url_details
    {
        public string url_short { get; set; }
        public string url_long { get; set; }
        public int type { get; set; }
    }


    public List<url_details> json_deserialized()
    {
        string json = "[{\"url_short\":\"http:\\/\\/sample.com\\/8jyKHv\",\"url_long\":\"http:\\/\\/www.sample.com\\/\",\"type\":0}]";

        List<url_details> items = new List<url_details>();
        items = JsonConvert.DeserializeObject<List<url_details>>(json);

        return items;
    }

您可以像下面一样访问元素

   List<url_details> obj = json_deserialized();

   string url_short = obj[0].url_short;

2

JSON 的方式确实是推荐的,但我不能多说。这里提供一个使用正则表达式的替代方法:

Regex rgxUrl = new Regex("\"url_short\":\"(.*?)\",\"");
Match mUrl = rgxUrl.Match(yourString);

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

必须使用正则表达式替换函数Regex.Replace(mUrl.Groups[1].Value, @"\", ""); - ajbee
1
@AJB 不是。 @ 已经转义了字符串。可以使用 "\\"@"\" - C4d

2
该字符串是一个JSON字符串,因此您可以创建一个类来获取值,例如:
public class Rootobject
{
    public Class1[] Property1
    {
        get;
        set;
    }
}

public class Class1
{
    public string url_short
    {
        get;
        set;
    }
    public string url_long
    {
        get;
        set;
    }
    public int type
    {
        get;
        set;
    }
}

在这个类之后,您可以像这样获取数据。
string json = "[{"url_short":"http:\/\/sample.com\/8jyKHv","url_long":"http:\/\/www.sample.com\/","type":0}]";
List<Rootobject> ro = JsonConvert.DeserializeObject<List<Rootobject>>(json);
string ururl = ro[0].Propert1[0].url_short;

去除反斜杠已经过时,因为在反序列化后它已经消失了。你的 JSON 示例字符串是错误的(缺少“\”)。请参阅 http://json.org 了解规范。 - Sir Rufo
1
还剩一个错误:JSON 包含对象数组 ;o) - Sir Rufo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接