2013-08-28 1 views
4

Je reçois un tableau d'objets JSON de servlet et essaye de remplir dans un contrôle de table dans le script java.Supprimer les citations doubles au début et à la fin de l'objet/chaîne JSON ou de la variable de script Java?

Voici mon code, pour une raison quelconque, il met des guillemets doubles au début et à la fin, ce qui n'est pas accepté par le contrôle Table pour remplir les valeurs. comment puis-je supprimer ces doubles guillemets au début et à la fin.

aData = [{"A":"one","B":"Two","C":"Three","D":"8","E":"No","F":"Business","G":"0", 
"L1H":"Analytics"},{"A":"ones","B":"Twos","C":"Threes","D":"85","E":"Nos", 
"F":"BusinessD","G":"0","L1H":"AnalyticsM"}] 

var oModel = new sap.ui.model.json.JSONModel(); 
oModel.setData({modelData: aData}); 
var oTable=sap.ui.getCore().byId("id1"); 
oTable.setModel(oModel); 
oTable.bindRows("/modelData"); // This static code of aData is working fine in 
           // my Table control of HTMl page. 

//Here, i Wanted to get values dynamically from servlet and populate it in Table. 
    var global; 
    $.get('someServlet', function(data) { 
var abc, xyz; 
for(var i=0;i<(data.length);i++){ 
abc='{'+'\"A\":'+'\"'+data[i].A+'\"'+','+'\"B":'+'\"'+data[i].B+'\"'+', 
'+'\"C\":'+'\"'+data[i].C+'\"'+','+'\"D\":'+'\"'+data[i].D+'\"'+', 
'+'\"E\":'+'\"'+data[i].E+'\"'+','+'\"F\":'+'\"'+data[i].F+'\"'+', 
'+'\"G\":'+'\"'+data[i].G+'\"'+','+'\"H\":'+'\"'+data[i].H+'\"}'; 
     if (xyz===undefined) 
      xyz=abc; 
     else     
     xyz=abc+','+xyz; 
      global = xyz; 
     } 
     global="["+global+"]"; 
     var oModel = new sap.ui.model.json.JSONModel(); 
     oModel.setData({modelData: global}); 
     var oTable=sap.ui.getCore().byId("id1"); 
     oTable.setModel(oModel); 
     oTable.bindRows("/modelData"); 

    }); 
    //global="[{"A":"one","B":"Two","C":"Three"}...]" 
    //alert(global); Displaying without double quotes as expected. 
    //when I see the value in Chrome debugger double quotes are appearing at begin&End 

Donc finalement j'ai valeur dans la variable globale est, avec des guillemets doubles.

//global="[{"A":"one","B":"Two","C":"Three","D":"8","E":"No","F":"Business","G":"0","L1H":"Analytics"}, 

{ "A": "uns", "B": "Twos", "C": "trois", "D": "85", "E": "n", "F ":" BusinessD " "G": "0", "L1H": "AnalyticsM"}]"

comment puis-je me débarrasser de cette double citations au début et à la fin de ce objets resultSet JSONArray Si je mets? Alerte, elle affiche sans double guillemets lorsque je vois cette variable globale dans le débogueur Chrome, elle est affichée avec des guillemets doubles et ne parvient pas à remplir les valeurs dans le contrôle Table.J'ai un peu de mal avec mon code à peupler les valeurs dans le contrôle Table qui viennent de Servlet au format JSON/String/Array, merci de nous aider

Appre de toute contribution et aide.

+1

il semble donc que votre ajax retourne JSON , mais vous essayez de supprimer toutes les propriétés à l'exception de trois, de sorte que vous effectuez manuellement la construction de chaînes json et que vous essayez de passer à une fonction? Est-ce correct? –

+1

wow. Je n'avais pas réalisé que c'était ce qu'il faisait. C'est bête. –

+0

Vous pouvez utiliser [stringify] (http://stackoverflow.com/questions/18498413/remove-double-quotes-at-begin-end-from-json-object-string-or-java-script-varia) pour convertir le json à la chaîne. –

Répondre

3

Vous pouvez appeler JSON.parse pour analyser votre chaîne en un objet à la fin, c'est:

global=JSON.parse("["+global+"]"); 

Mais au lieu de construire vous-même une chaîne de JSON à la volée, puis l'analyse, il peut juste être plus simple à mettre var global = []; et dans votre boucle faire:

global.push({ 
    Deals: data[i].Deals, 
    L1H: data[i].L1H, 
    L2H: data[i].L2H 
}); 

Avez-vous essayé ce qui suit?

$.get('someServlet', function(data) { 
    var oModel = new sap.ui.model.json.JSONModel(); 
    oModel.setData({modelData: data}); 
    var oTable=sap.ui.getCore().byId("id1"); 
    oTable.setModel(oModel); 
    oTable.bindRows("/modelData"); 
}); 
+0

C'est ce que j'ai dans la méthode doGet de la servlet response.getWriter(). print (jsonArray); quand je fais alerte (données), en obtenant comme [objet, objet], [objet, objet], [objet, objet – user2682165

+0

Droit, parce que les données sont un tableau d'objets, qui devrait être suffisant pour remplir le contrôle de table (en fonction sur comment ou ce que vous utilisez pour le faire). Si vous voulez la représentation textuelle des données, vous pouvez juste faire 'alert (JSON.stringify (data));', mais si aucune de nos réponses ne vous a encore aidé, alors nous pourrions mal comprendre le problème que vous rencontrez. – sgbj

+0

Ok. Je suis désolé de vous avoir causé de la confusion. Laissez-moi mettre différemment. – user2682165

1

Votre variable global est une chaîne JSON. Vous n'avez pas besoin de construire une chaîne. Pour autant que je sache, data est déjà un objet JavaScript. Je pense que c'est ce que vous voulez:

var global;  
$.get('someServlet', function(data) { 
    global = data; 
    populateTable(global); // You could just as easily pass the data variable here 
}); 
+0

Je suis capable de remplir une table avec des données statiques telles que global = [{"A": "un", "B": "Deux", "C": "Trois", "D": "8", " E ":" Non "," F ":" Business "," G ":" 0 "," L1H ":" Analytics "}, {" AB ":" un "," BC ":" Deux ", "CD": "Trois", "DF": "8", "EG": "Non", "FZ": "Business", "GM": "0", "L1H": "Analytics"} ] quand j'obtiens des valeurs dans cette variable globale à partir des données, c'est de la difficulté. Comment puis-je atteindre cet objectif? – user2682165

+0

Dans mon exemple ci-dessus, vous devriez simplement pouvoir appeler la fonction pour remplir cette table immédiatement après avoir défini la variable globale. J'ai édité mon exemple pour montrer ce que je veux dire. – zigdawgydawg

+0

cela échoue. quand j'affecte globalement directement au contrôle de table, obtenant une erreur. quand j'aime vraiment global = [{"A": "un", "B": "Deux", "C": "Trois", "D": "8", "E": "Non", " F ":" Business "," G ":" 0 "," L1H ":" Analytics "}, {" AB ":" un "," BC ":" Deux "," CD ":" Trois "," DF ":" 8 "," EG ":" Non "," FZ ":" Business "," GM ":" 0 "," L1H ":" Analytics "}]; Remplir (global), ça marche – user2682165

2

Ne pas compiler ou analyser vous-même. Il existe des méthodes disponibles pour le faire pour vous.

Si votre JSON retourné a seulement un tableau d'objets avec les trois propriétés Deals, L1H et L2H, alors data est ce que vous voulez. Si le JSON retour a plus de propriétés, et que vous voulez que ces trois, faire à la place:

function(data) { 

    var arr = $.map(data, function(item, idx) { 
     return { 
      Data: item.Data, 
      L1H: item.L1H, 
      L2H: item.L2H 
     }; 
    }); 
} 
+0

Merci pour toutes les réponses. En fait, je passe la base de données resultSet au format JSON Array au servlet. c'est le tableau JSON que je passe à servlet. [{"A": "un", "B": "Deux", "C": "Trois", "D": "8", "E" : "Non", "F": "Business", "G": "0", "L1H": "Analytics"}, {"AB": "un", "BC": "Deux", "CD" ":" Trois "," DF ":" 8 "," EG ":" Non "," FZ ":" Business "," GM ":" 0 "," L1H ":" Analytics "} ]. cela signifie le nombre de lignes renvoyées par le programme JDBC. – user2682165

+0

Si je ne pas analyser moi-même dans le code, alors obtenir une erreur. – user2682165

+0

J'ai réitéré ma question autrement. Quelqu'un pourrait-il jeter un coup d'œil à mes inquiétudes? – user2682165

0

Essayez avec ceci:

var myJSON = eval(data); 

où les données est la chaîne que le servelt a envoyé. La fonction Eval fait le travail, analyse une chaîne en JSON.

-1

La forma correcta de eliminar las Comillas es con

var obJason = eval(dataString); 

var obj= "[{"ID":"786-000X-XX8","NAME":"LISANDRO ARCILES"}]"; 

aplicado la funcion eval()

obj= eval(obj); 

lo tranforma al obejeto deseado de tipo Json

+1

S'il vous plaît poster en anglais seulement –

Questions connexes