Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将JSON数据读入C#字符串_C#_Xml_Json_Json.net_Html Agility Pack - Fatal编程技术网

将JSON数据读入C#字符串

将JSON数据读入C#字符串,c#,xml,json,json.net,html-agility-pack,C#,Xml,Json,Json.net,Html Agility Pack,我正在从事一个C#控制台应用程序项目,我被要求解析网页中的一些JSON数据,并从JSON中提取某些值,如产品价格和颜色 我的JSON数据,使用HTMLAgilityPack从网页中提取。我不得不用“替换”,使之成为有效的JSON,另一个问题是,C如何正确处理这个问题 { "currentAsinData": { "Asin": "B0013NCYX4", "buyingPPU": "", "variantImages": [

我正在从事一个C#控制台应用程序项目,我被要求解析网页中的一些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
无法反序列化对象

我不熟悉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

您可以将json建模为对象,然后使用json.Net对其进行反序列化

AsinData ad = JsonConvert.DeserializeObject<AsinData>(json)
Asinanda ad=JsonConvert.DeserializeObject(json)
我认为这里的问题在于,您的javascript抓取代码正在从数据中删除尾随大括号,这会阻止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从
JToken
获取所需的数据。文档中提供了如何查询特定值的说明。

您所说的“C不允许
”是什么意思"? 请显示您正在使用的代码和出现的错误。看起来JSON无效。尝试将其粘贴到:中并进行验证。请查看@jparram是否无效,因为缺少一个
}
。@jparram结尾缺少一个}。