将JSON数据读入C#字符串
我正在从事一个C#控制台应用程序项目,我被要求解析网页中的一些JSON数据,并从JSON中提取某些值,如产品价格和颜色 我的JSON数据,使用HTMLAgilityPack从网页中提取。我不得不用将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": [
“
替换”
,使之成为有效的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结尾缺少一个}。