IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Silverlight Discussion :

JSON from PHP to Silverlight problème avec les BackSlash's


Sujet :

Silverlight

  1. #1
    Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2010
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2010
    Messages : 58
    Points : 44
    Points
    44
    Par défaut JSON from PHP to Silverlight problème avec les BackSlash's
    bjr,
    j’essaye d’interroger une bdd SQLSERVER depuis Silverlight à travers un web service PHP.

    Le code du fichier select.php qui me retourne le résultat d'une requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
        include 'sqlserver_vars.php';
        $Requete = $_GET['Requete'];
        if($Requete != NULL and $Requete != "")
        {
            $connection = odbc_connect("Driver={SQL Server};Server=$server;Database=$db",$dbUsername,$dbPassword) ;
            $Resultat= odbc_exec($connection, $Requete);
     
            /**/
            $NbrChamps = odbc_num_fields($Resultat);
     
            //-----------------------------------------------------------    
            if($NbrChamps > 0)
            {
                    //-----------------------------------------------------------
                    $type = array();
                    for($i=1;$i<=$NbrChamps;$i++)
                    {
                        $lig = array();    
                        array_push($lig,odbc_field_name($Resultat,$i),odbc_field_type($Resultat,$i));
                        array_push($type,$lig);
                    }                
                    //-----------------------------------------------------------    
     
                    //-----------------------------------------------------------
                    $data = array();    
                    while($itemRow = odbc_fetch_row($Resultat))
                    {        
                        $lig = array();    
                        for($i=1;$i<=$NbrChamps;$i++)
                        {
                            $val = utf8_encode(odbc_result($Resultat,$i ));
                            array_push($lig,$val);
                        }    
                        array_push($data,$lig);
                    }
                    //-----------------------------------------------------------
     
                $type_data = array("Type" => $type,"Data" => $data,);
                echo json_encode($type_data);
            }
            //-----------------------------------------------------------
            odbc_close($connection);
        }
    ce scripte me retourne la chaine JSON suivante par exemple pour une requête donnée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    {
      "Type":
       [
        ["CODE_MOTIF","smallint"],
        ["REF_MOTIF","nvarchar"],
        ["DES_MOTIF","nvarchar"],
        ["CALC_CMUP","smallint"]
       ]
      ,
      "Data":
       [
        ["1","VENTE","Vente","0"],
        ["2","ACHAT","Achat","1"],
        ["3","PERTE","Perte","0"],
        ["4","RETOUR","Retour","0"]
       ]
    }
    Une fois cette chaine récupérée coté Silverlight j'utilise le Array "Type" pour créer un type (Classe) dynamique avec les réflexions
    Puis
    Pour chaque élément (Array) du Array "Data" je crée une instance de la classe dynamique créée précédemment et je SET les propriétés une à une et je constitue une liste d'objets prêts à être bindée.

    le problème:
    la récupération des Strings me pose problème de parsing
    pour une chaine String = Ecran 15" TFT/LED
    JSON la code en --> "Ecran 15\" TFT\/LED"
    du coté Silverlight je fait ceci pour la récupérer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    //Champ est un JsonValue qui contien la chaine ""Ecran 15\" TFT\/LED""
    string valeure_champ = Champ.ToString().Substring(1, Champ.ToString().Length - 2);//.Replace("\\",""); 
    //valeure_champ contien maintenant "Ecran 15\\" TFT\\/LED"
    à remarquer que chaque \ est doublé après le ToString()
    je ne veux pas utiliser le Replace("\\","") parce que si ma chaine contiens un \\ qui ne viens pas du résultat de l'encodage il seras supprimé
    je me prend la tète depuis hier sans pouvoir arriver à une solution propre.
    PS. je suis débutant avec php et JSON

  2. #2
    Rédacteur
    Avatar de The_badger_man
    Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2005
    Messages
    2 745
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 745
    Points : 8 538
    Points
    8 538
    Par défaut
    Utilise une librairie coté Silverlight pour lire le JSON: http://json.codeplex.com/
    Les règles du forum
    Le trio magique : FAQ + Cours + fonction rechercher
    Mes articles
    Pas de questions par messages privés svp

    Software is never finished, only abandoned.

  3. #3
    Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2010
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2010
    Messages : 58
    Points : 44
    Points
    44
    Par défaut
    merci pour votre réponse,
    comment je fait pour dé-sérialiser le JSON suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    {
      "Type":
       [
        ["CODE_MOTIF","smallint"],
        ["REF_MOTIF","nvarchar"],
        ["DES_MOTIF","nvarchar"],
        ["CALC_CMUP","smallint"]
       ]
      ,
      "Data":
       [
        ["1","VENTE","Vente","0"],
        ["2","ACHAT","Achat","1"],
        ["3","PERTE","Perte","0"],
        ["4","RETOUR","Retour","0"]
       ]
    }
    sachant que je veux récupérer que des Array basiques puisque je ne veux pas envoyer des objets pour économiser le nom des attributs qui seras générer avant chaque valeur (jusqu’à 60% de Ko en mois dans certains cas ).
    C'est pour cela que j'utilise la forme la plus basique possible qui est de Tableau de Tableaux de Tableaux.
    je veux récupérer dans un premier temps Deux Aarray of Aarray
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
       [
        ["CODE_MOTIF","smallint"],
        ["REF_MOTIF","nvarchar"],
        ["DES_MOTIF","nvarchar"],
        ["CALC_CMUP","smallint"]
       ]
    et
       [
        ["1","VENTE","Vente","0"],
        ["2","ACHAT","Achat","1"],
        ["3","PERTE","Perte","0"],
        ["4","RETOUR","Retour","0"]
       ]
    puis pour chaque Aarray of Aarrays je récupère le Array de 2éme niveau
    par exemple pour le première Aarray of Aarrays je veut récupérer les Arrays
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
         ["CODE_MOTIF","smallint"] et
         ["REF_MOTIF","nvarchar"] et
         ["DES_MOTIF","nvarchar"] et
         ["CALC_CMUP","smallint"]
    Une fois les tableaux du niveaux plus bas récupérés dans C# je peut les utiliser

  4. #4
    Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2010
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2010
    Messages : 58
    Points : 44
    Points
    44
    Par défaut
    je crois que c'est bon jais finalement récupérer les Tableaux dans des listes comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    List<List<List<string>>> Type_Data =  (List<List<List<string>>>)JsonConvert.DeserializeObject(e.Result,typeof(List<List<List<string>>>));
    après avoir modifié la ligne 38 du scripte PHP comme ceci pour avoir que des Array imbriquées sans attributs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $type_data = array($type,$data,);
    //aulieu de :
    //$type_data = array("Type" => $type,"Data" => $data,);
    je vais voir si le problème des \\ est réglé

  5. #5
    Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2010
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2010
    Messages : 58
    Points : 44
    Points
    44
    Par défaut
    c'est Nickel !
    je considère que c'est résolu.
    Merci.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [RegEx] Problème avec les backslashes
    Par Shuny dans le forum Langage
    Réponses: 4
    Dernier message: 25/05/2007, 23h01
  2. [PHP-JS] Mini problème avec les "" et les ''
    Par grumly22 dans le forum Langage
    Réponses: 15
    Dernier message: 22/06/2006, 13h52
  3. Problème avec les variables en PHP
    Par King_T dans le forum Langage
    Réponses: 3
    Dernier message: 06/05/2006, 23h46
  4. [Cookies] Problème avec les sessions PHP !!!
    Par boukay dans le forum Langage
    Réponses: 4
    Dernier message: 14/02/2006, 17h32
  5. [SQL-Server] ms sql server et php : problème avec les caractères accentués
    Par stephane9422 dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 05/12/2005, 17h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo