将HTML无序列表转换为JSON数组
本文关键字:JSON 数组 转换 列表 HTML 无序 | 更新日期: 2023-09-27 18:08:59
我想转换一个无序列表,它被存储为一个string
到JSON数组。
我需要这个的原因是因为我的屏幕抓取一个网站(与许可),所以所有我得到的是网站源存储为string
(是的,这是可怕的),直到他们完成他们的API(是的,他们已经同意不改变他们的任何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,我建议您下载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。