将HTML无序列表转换为JSON数组

本文关键字:JSON 数组 转换 列表 HTML 无序 | 更新日期: 2023-09-27 18:08:59

我想转换一个无序列表,它被存储为一个string到JSON数组。

我需要这个的原因是因为我的屏幕抓取一个网站(与许可),所以所有我得到的是网站源存储为string(是的,这是可怕的),直到他们完成他们的API(是的,他们已经同意不改变他们的任何HTML在这个过程中)。: -)

HTML:

<ul class="column">
  <li><a href="/view.php?m=48902&g=313433">Item 1</a></li>
  <li><a href="/view.php?m=09844&g=313433">Item 2</a></li>
  <li><a href="/view.php?m=23473&g=313433">Item 3</a></li>
</ul>
JSON:

{"items":[
        {
            id: 1,
            url: "/view.php?m=48902&g=313433",
            name: "Item 1",
            m: 48902,
            g: 313433
        },
        {
            id: 2,
            url: "/view.php?m=09844&g=313433",
            name: "Item 2",
            m: 09844,
            g: 313433
        },
        {
            id: 3,
            url: "/view.php?m=23473&g=313433",
            name: "Item 3",
            m: 23473,
            g: 313433
        }
]}

将HTML无序列表转换为JSON数组

建议方法:

由于您将广泛解析HTML,我建议您下载htmllagilitypack并使用它来解析HTML。网站上有一些示例代码。它还支持LINQ,所以解析HTML应该相对容易。

至于转换为JSON,我的建议是,你创建一个类与你想要的结构;例如:

public class MyItem
    {
        public int id { get; set; }
        public string url { get; set; }
        public string name { get; set; }
        public int g { get; set; }
        public int m { get; set; }
    }

现在你已经准备好了结构作为一个类,你可以用你从HTML中解析的所有元素构建一个List<MyItem>

转换为JSON的最后一步是:

List<MyItem> list = .... the list constructed
JavascriptSerializer js = new JavascriptSerializer();
string jsonOutput = js.Serialize(list);

由于您正在抓取屏幕,我建议使用Html Agility Pack读取Html(使用XPath),然后使用JSON库(如JSON.net)或使用JavaScriptSerializer (System.Web.Script.Serialization.JavaScriptSerializer)类将HAP对象序列化为JSON。