저는 C # Console App 프로젝트를 작업 중이며 웹 페이지에서 일부 JSON 데이터를 구문 분석하고 JSON에서 제품 가격 및 색상과 같은 특정 값을 가져 오도록 요청 받았습니다.
내 JSON 데이터, HTMLAgilityPack을 사용하여 웹 페이지에서 가져온 것. 올바른 JSON, 또 다른 질문을하기 위해 \"
with "
를 대체해야했습니다. 어떻게 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
가 객체를 deserialize하지 못합니다.
C #에서 JSON을 처음 접했을 때 JSON.NET 라이브러리를 사용하고 있습니다. 최종 목표는 JSON을 해독하여 더 많은 사용을 위해 C # 문자열로 데이터를 검색 할 수 있습니다. 하지만 내가 어떻게 할 수 있는지에 관해서는 고민 중이다.
미리 감사드립니다!
요청 된대로 더 많은 정보.
자바 스크립트 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.net에 의해 JSON으로 올바르게 파싱되지 않도록하는 것이라고 생각합니다. 당신은 이것을 가지고 있습니다 :
.Replace("};\nvar extensibilityData = {};\n\r\n//]]>//", "")
그러나 그것은 다음과 같아야합니다.
.Replace(";\nvar extensibilityData = {};\n\r\n//]]>//", "")
올바른 JSON 문자열을 얻었 으면 다음과 같이 deserialize 할 수 있습니다.
JToken token = JToken.Parse(json); // works with either objects or arrays
거기에서 Json.Net의 LINQ-JSON API 를 사용하여 JToken
에서 원하는 데이터를 얻을 수 있습니다. 설명서에는 특정 값을 쿼리하는 방법을 보여주는 샘플 코드 가 있습니다.