JSONデータをC#の文字列に読み込む

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

質問

私はC#Console Appプロジェクトに取り組んでおり、WebページからいくつかのJSONデータを解析し、JSONから製品の価格や色などの特定の値を取得するよう求められました。

HTMLAgilityPackを使用してWebページから取得したJSONデータ。私はそれを有効な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はオブジェクトを逆シリアルJArrayできません。

私はC#でJSONを初めて使っています。私はJSON.NETライブラリを使用しています。私の最終目標はJSONを解読することです。データをC#文字列でさらに使用するために取得できます。しかし、私はこれをどうやってやれるのかについては固執しています。

よろしくお願いします!

要求されたより多くの情報。

JSONデータをjavascriptでスクレイプするコードはここにあります。

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);
        }

Webページ私は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のスクラップコードがデータから末尾のブレースを取り除いて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 API使用して、 JTokenから必要なデータを取得できます。ドキュメントには、特定の値を照会する方法を示すサンプルコードがあります。



Related

ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow