Lecture de données JSON sur une chaîne C #

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

Question

Je travaille sur un projet d'application console C # et on m'a demandé d'analyser certaines données JSON d'une page Web et d'extraire certaines valeurs du JSON, telles que le prix du produit et la couleur.

Mes données JSON, extraites d'une page Web à l'aide de HTMLAgilityPack. J'ai dû remplacer \" par " pour le rendre valide, une autre question: comment C # peut-il gérer cela correctement?

{
    "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"
                }
            }
        ]
    }
}

À présent, le code JSON ci-dessus est correct, mais je ne parviens pas à lire les données, car C # ne permet pas " et si j'utilise \" JArray ne parvient pas à désérialiser l'objet.

Je connais JSON en C #, je me sers de la bibliothèque JSON.NET. Mon objectif final est de déchiffrer le JSON, afin que je puisse récupérer les données dans une chaîne C # pour une utilisation ultérieure. Mais je suis bloqué sur la façon dont je peux faire cela.

Vous remerciant à l'avance!

Plus d'informations à la demande.

Mon code pour gratter les données JavaScript JSON est ici.

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

La page Web à partir de laquelle je prends le 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

Réponse populaire

Je pense que le problème ici est que votre code de suppression de javascript supprime l'accolade de fin des données, ce qui l'empêche alors d'être correctement analysé comme JSON par JSON.net. Tu as ceci:

 .Replace("};\nvar extensibilityData = {};\n\r\n//]]>//", "")

Mais ça devrait être ça:

 .Replace(";\nvar extensibilityData = {};\n\r\n//]]>//", "")

Une fois que vous avez une chaîne JSON correcte, vous pouvez la désérialiser comme ceci:

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

À partir de là, vous pouvez utiliser l'API LINQ-to-JSON de Json.Net pour obtenir les données souhaitées à partir de JToken . La documentation contient un exemple de code indiquant comment interroger des valeurs spécifiques.




Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi