JSON überprüfen - nicht Möglich?

  • C#

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von meikel__.

    JSON überprüfen - nicht Möglich?

    Guten Tag!
    Ich habe ein kleines Problem, was mich hier schon seit einer Stunde aufhält.

    Ich möchte überprüfen ob xxx im JSON vorhanden ist und den Wert überprüfen, jedoch klappt das nicht so.
    Ich bekomme folgende Fehlermeldung: "CS1012 - Zu viele Zeichen im Zeichenliteral."

    Habe schon gegoogelt und nicht wirklich passendes zu meinem Problem gefunden.
    Mein Code:

    C#-Quellcode

    1. public void grabInventory()
    2. {
    3. //JSON via URL holen
    4. var content = new System.Net.WebClient().DownloadString(this.backpack);
    5. JavaScriptSerializer ser = new JavaScriptSerializer();
    6. //String und Char schon versucht => gleiches Problem
    7. var JSONObjc = ser.Deserialize<string>(content);
    8. //Hier taucht das Problem auf
    9. if(JSONObjc['success'] == false)
    10. {
    11. //msgbox ausgeben......
    12. }
    13. }
    14. }

    Freue mich auf jede Antwort!

    Mit freundlichen Grüßen

    Seruz schrieb:

    JSON
    Poste mal Deine JSon-Datei.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Um das JSON-Objekt ordentlich deserialisieren zu können brauchst du eine Klasse die die Struktur des JSON-Objekts definiert.
    Du kannst das JSON-Objekt nicht einfach mal in einen String deserialisieren.
    Versuchs so (angenommen du willst die Struktur nicht mit einer Klasse nachbauen):

    C#-Quellcode

    1. var result = ser.DeserializeObject(content);
    2. bool success;
    3. if (bool.TryParse(result["success"], out success)) {
    4. if (!success) {
    5. //etc
    6. }
    7. }


    Falls du jedoch eine Klasse hast (die du dir z.B. hier generieren kannst: jsonutils.com/, json2csharp.com/):

    C#-Quellcode

    1. var result = ser.Deserialize<string>(content); //falsch
    2. var result = ser.Deserialize<[Name deiner Strukturklasse]>(content); //richtig
    3. if(!result.success){
    4. //etc
    5. }

    meikel__ schrieb:

    ganz anders aufgebaut
    Da musst Du Dich durchhangeln.
    Inventory kommt hier nur eins vor.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Rinecamo schrieb:

    Dann probierst du halt einfach mal ein wenig rum.
    pastebin.com/nYvZv3E3 (Nimm JSON.NET)

    Danke! Ich habe aber noch eine Frage bezüglich JSON's in C#.
    Da ich gezwungen bin die Bilder von den Items zu holen, um sie anzuzeigen, hab ich folgendes probiert:

    C#-Quellcode

    1. public void grabInventory()
    2. {
    3. var content = new System.Net.WebClient().DownloadString(this.backpack);
    4. JavaScriptSerializer ser = new JavaScriptSerializer();
    5. var JSONObjc = JsonConvert.DeserializeObject<Profile>(content);
    6. if(JSONObjc.success == false)
    7. {
    8. MessageBox.Show("Inventory is private!");
    9. }
    10. var inventory = JSONObjc.rgInventory;
    11. var descriptions = JSONObjc.rgDescriptions;
    12. foreach (var item in inventory)
    13. {
    14. var description = descriptions[InventoryItem.classid + "_" + InventoryItem.instanceid]; //Ausnahme ausgelöst: "System.NullReferenceException"
    15. //Nur zum überprüfen
    16. MessageBox.Show("http://steamcommunity-a.akamaihd.net/economy/image/" + description +"/100fx100f");
    17. }
    18. }


    Ich hab es auch in PHP probiert:

    PHP-Quellcode

    1. <?php
    2. /*
    3. * @author Meikel Smirnow
    4. */
    5. class InventoryGrabber {
    6. private $backpack = null;
    7. public function __construct($url) {
    8. $this->backpack = $url;
    9. }
    10. public function getLastBotItems() {
    11. $url = $this->backpack;
    12. $curl = curl_init();
    13. $userAgent = 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)';
    14. curl_setopt($curl,CURLOPT_URL,$url);
    15. curl_setopt($curl,CURLOPT_RETURNTRANSFER,TRUE);
    16. curl_setopt($curl,CURLOPT_CONNECTTIMEOUT,5);
    17. curl_setopt($curl, CURLOPT_USERAGENT, $userAgent);
    18. curl_setopt($curl, CURLOPT_FAILONERROR, TRUE);
    19. curl_setopt($curl, CURLOPT_FOLLOWLOCATION, TRUE);
    20. curl_setopt($curl, CURLOPT_AUTOREFERER, TRUE);
    21. curl_setopt($curl, CURLOPT_TIMEOUT, 10);
    22. $content = curl_exec($curl);
    23. curl_close($curl);
    24. $content = json_decode($content, true);
    25. $HTML = null;
    26. if($content['success'] == false) {
    27. return false;
    28. }
    29. $inventory = $content['rgInventory'];
    30. $descriptions = $content['rgDescriptions'];
    31. $pos = 1;
    32. $showcases = false;
    33. foreach($inventory as $itemid=>$item){
    34. $description = $descriptions[$item['classid'].'_'.$item['instanceid']] ;
    35. $description['market_hash_name'] = (isset($description['market_hash_name']) ? $description['market_hash_name'] : $description['name']);
    36. $commodity = $description['commodity'];
    37. //die letzten neuen 5 Items holen, was ich in C# [u][i][b]nicht[/b][/i][/u] vorhabe.
    38. if($description['tradable'] <= 5){
    39. if($pos <= 5) {
    40. $pos++;
    41. $HTML .= '<span class="countdown_section large-3 medium-3 columns" style="max-width: 210px;"><span class="countdown_amount"><img src="http://steamcommunity-a.akamaihd.net/economy/image/'.$description['icon_url'].'/100fx100f" /></span><br>'.$description['name']/*.$pos*/.'</span>'; //Hier werden die Bilder vom jeweiligen Item angezeigt
    42. }
    43. } else {
    44. return false;
    45. }
    46. }
    47. echo $HTML;
    48. }
    49. }