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



我正在处理一个 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 = {};nrn//]]>//", "").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)

我认为这里的问题是您的javascript抓取代码正在从数据中删除尾随大括号,从而阻止 JSON.net 将其正确解析为JSON。 你有这个:

.Replace("};nvar extensibilityData = {};nrn//]]>//", "")

但它应该是这样的:

.Replace(";nvar extensibilityData = {};nrn//]]>//", "")

获得正确的 JSON 字符串后,您可以像这样反序列化它:

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

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

相关内容

  • 没有找到相关文章

最新更新