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

3
我可以帮您将存储为字符串的无序列表转换为JSON数组。我需要这样做的原因是,我正在使用屏幕抓取技术(已经获得允许),所以我的所有数据都以字符串的形式存在(是的,情况很糟糕),直到他们完成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
        }
]}

3
我认为你不应该在服务器端进行此转换,而应该使用jQuery在客户端完成它。 - Tarik
为什么你需要在服务器端进行这项操作? - Chad Levy
@Icarus:我需要将一个无序的 HTML 列表转换成一个 JSON 数组,其中包含原来包含在列表项中的各种不同的值作为数组属性。 - fulvio
@Fluvio,这很有道理,但不清楚你觉得哪一部分难以实现。我将发布一个带有一些指针和伪代码的答案,希望它能给你一些启示。 - Icarus
@Icarus:我想我不太确定如何从每个列表项中获取特定的值,并使用正确的值和属性构建JSON。谢谢。 - fulvio
显示剩余3条评论
2个回答

3

建议方法:

由于您需要广泛解析HTML,我建议您下载HTMLAgilityPack并使用它来解析您的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);

谢谢。我将使用HTMLAgilityPack来完成我需要的工作。完美。 - fulvio
关于JSON转换,除了Icarus提供的内容外,我想推荐这个库:http://james.newtonking.com/pages/json-net.aspx - Tarik

0

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


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