将JSON数据读取到C#字符串

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

我正在研究C#Console App项目,并且我被要求从网页解析一些JSON数据并从JSON中提取某些值,例如产品价格和颜色。

我的JSON数据,使用HTMLAgilityPack从网页中提取。我不得不替换\" with "使其成为有效的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无法反序列化对象。

我是C#中的JSON新手,我使用的是JSON.NET库,我的最终目标是希望破译JSON,因此我可以将数据检索到C#字符串以供进一步使用。但我对如何做到这一点感到困惑。

提前感谢你!

更多信息请求。

我的代码来抓取javascript JSON数据就在这里。

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.net正确地解析为JSON。你有这个:

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

但它应该是这样的:

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

一旦你有一个正确的JSON字符串,你可以像这样反序列化它:

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

从那里,您可以使用Json.Net的LINQ-to-JSON APIJToken获取您想要的数据。该文档包含示例代码 ,显示如何查询特定值。



Related

许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow