C # - конвертировать неупорядоченный список HTML в массив JSON - PullRequest
3 голосов
/ 16 сентября 2011

Я хотел бы преобразовать неупорядоченный список, который хранится как 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
        }
]}

Ответы [ 2 ]

3 голосов
/ 16 сентября 2011

Предлагаемый подход:

Поскольку вы будете интенсивно разбирать 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; }
    }

Теперь, когда у вас есть готовая структура как класс, вы можете создать List<MyItem> со всеми элементами, которые вы проанализировали из своего HTML.

Последний шаг для преобразования в JSON - это вопрос выполнения:

List<MyItem> list = .... the list constructed
JavascriptSerializer js = new JavascriptSerializer();
string jsonOutput = js.Serialize(list);
0 голосов
/ 16 сентября 2011

Поскольку вы просматриваете экран, я бы рекомендовал использовать Html Agility Pack для чтения HTML (с использованием XPath), а затем использовать библиотеку JSON, например JSON.net или используйте класс JavaScriptSerializer (System.Web.Script.Serialization.JavaScriptSerializer) для сериализации объекта HAP в JSON.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...