Чтение данных JSON для строки C #

c# html-agility-pack json json.net xml

Вопрос

Я работаю над проектом приложения C # Console, и меня попросили разобрать некоторые данные JSON с веб-страницы и вытащить определенные значения из JSON, такие как цена и цвет продукта.

Мои данные JSON, извлеченные из веб-страницы с помощью HTMLAgilityPack. Мне пришлось заменить \" на " чтобы сделать его действительным JSON, еще один вопрос, как C # справится с этим правильно?

{
    "currentAsinData": {
        "Asin": "B0013NCYX4",
        "buyingPPU": "",
        "variantImages": [
            {
                "tinyImage": {
                    "HEIGHT": "70",
                    "URL": "http: //ecx.images-amazon.com/images/I/419CBUN6h8L._SL110_.jpg",
                    "WIDTH": "110"
                },
                "swatchImage": {
                    "HEIGHT": "19",
                    "URL": "http: //ecx.images-amazon.com/images/I/419CBUN6h8L._SL30_.jpg",
                    "WIDTH": "30"
                },
                "mediumImage": {
                    "HEIGHT": "168",
                    "URL": "http: //ecx.images-amazon.com/images/I/419CBUN6h8L._SX168_.jpg",
                    "WIDTH": "168"
                },
                "largeImage": {
                    "HEIGHT": "270",
                    "URL": "http: //ecx.images-amazon.com/images/I/419CBUN6h8L._SX270_.jpg",
                    "WIDTH": "270"
                },
                "thumbnailImage": {
                    "HEIGHT": "120",
                    "URL": "http: //ecx.images-amazon.com/images/I/419CBUN6h8L._SX120_.jpg",
                    "WIDTH": "120"
                }
            }
        ]
    }
}

Теперь приведенный выше JSON является правильным, насколько я знаю, но я не могу прочитать данные, поскольку C # не позволяет " и если я использую \" мой JArray не может десериализовать объект.

Я новичок в JSON в C #, я использую библиотеку JSON.NET, моя конечная цель, надеюсь, расшифровывает JSON, поэтому я могу получить данные в строку C # для дальнейшего использования. Но я застрял в том, как я могу это сделать.

Заранее благодарю!

Дополнительная информация по запросу.

Мой код для очистки данных JSON Javascript приведен здесь.

string theScript = xd.SelectSingleNode(".//div[contains(@class,'webstore-ProductJSONData')]/script[contains(.,'var detailData')]").GetInnerXML().HtmlDecode();
        if(theScript != null)
        { 
            string[] varsln = Regex.Split(theScript, "var detailData =");
            string json = varsln[1].HtmlDecode().Replace("};\nvar extensibilityData = {};\n\r\n//]]>//", "").Trim();

            Console.WriteLine(json);
        }

Веб-страница Я беру JSON из

http://www.dangleberrymusic.co.uk/Childrens-Childs-Electric-Guitar-  quarter/dp/B00ESEOXWK?class=quickView&field_availability=-1&field_browse=1592919031&id=Childrens+Childs+Electric+Guitar+quarter&ie=UTF8&refinementHistory=color_map%2Cbrandtextbin%2Csubjectbin%2Cprice%2Csize_name&searchNodeID=1592919031&searchPage=1&searchRank=salesrank&searchSize=12

Популярные ответы

Я думаю, что проблема заключается в том, что ваш код javascript-scraping удаляет конечную фигуру из данных, а затем не позволяет JSON правильно разбираться JSON.net. У вас есть следующее:

 .Replace("};\nvar extensibilityData = {};\n\r\n//]]>//", "")

Но это должно быть так:

 .Replace(";\nvar extensibilityData = {};\n\r\n//]]>//", "")

Как только вы получите правильную строку JSON, вы можете десериализовать ее так:

JToken token = JToken.Parse(json);  // works with either objects or arrays

Оттуда вы можете использовать API LINQ-to-JSON от JToken для получения данных, которые вы хотите получить от JToken . В документации приведен пример кода, который показывает, как запрашивать определенные значения.



Related

Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow