JSON-Daten in C # -String lesen

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

Frage

Ich arbeite an einem C # -Konsolen-App-Projekt und ich wurde gebeten, einige JSON-Daten von einer Webseite zu analysieren und bestimmte Werte wie Produktpreis und Farbe aus dem JSON zu ziehen.

Meine JSON-Daten, die mit HTMLAgilityPack von einer Webseite abgerufen wurden. Ich musste \" mit " ersetzen, um es gültig zu machen JSON, eine andere Frage, wie kann C # das richtig handhaben?

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

Jetzt ist das obige JSON korrekt, soweit ich weiß, aber ich kann die Daten nicht lesen, da C # nicht erlaubt " und wenn ich benutze \" mein JArray fehlschlägt, das Objekt zu deserialisieren.

Ich bin neu in JSON in C #, ich benutze die JSON.NET-Bibliothek, mein Endziel ist hoffentlich entziffern die JSON, so kann ich die Daten in eine C # Zeichenfolge für die weitere Verwendung abrufen. Aber ich bin fest, wie ich das machen kann.

Danke im Voraus!

Weitere Informationen wie gewünscht.

Mein Code, um die Javascript JSON-Daten zu kratzen, ist hier.

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

Die Webseite, von der ich den JSON verwende

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

Beliebte Antwort

Ich denke, das Problem hier ist, dass Ihr JavaScript-Scraping-Code die nachfolgende Klammer aus den Daten entfernt, die dann verhindert, dass es von JSON.net als JSON korrekt analysiert wird. Du hast das:

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

Aber es sollte das sein:

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

Sobald Sie eine korrekte JSON-Zeichenfolge haben, können Sie sie wie folgt deserialisieren:

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

Von dort aus können Sie die LINQ-to-JSON-API von JToken , um die gewünschten Daten vom JToken . Die Dokumentation enthält Beispielcode , der zeigt, wie bestimmte Werte abgefragt werden.



Related

Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow