Saturday, April 2, 2016

Re: How to use json in client side



On Saturday, April 2, 2016 at 12:52:51 PM UTC+2, schmitt kevin wrote:
Hello everyone , can you help me please?

in my server wich connect with mysql databse i send to my client one json table like that 

rs = stmt.executeQuery("SELECT * FROM test");
res ="[";
while (rs.next()) {
String titre = rs.getString("id");
String auteur = rs.getString("comment");
res += "\t{\"Titre\": \""+titre+ "\",\n";
res += "\t\"Auteur\": \""+auteur+ "\",\n";
res += "\t},\n";
}
res += "]\n";


So this returns an array of objects, each object having a Titre and Auteur property; e.g.
[    {"Titre": "titre 1",
    "Auteur": "auteur 1",
    },
    {"Titre": "titre 2",
    "Auteur": "auteur 2",
    },
]

Note however that you have dangling commas inside both objects and the array, and that's not valid JSON (neither http://json.org nor http://www.ecma-international.org/ecma-262/5.1/#sec-15.12.1) so it'll likely break at parsing time.

(side note: either use a proper JSON library, or properly escape the titre and auteur values or you'll risk corrupting your output)
 
 and after i try to receive and use json data but dont work 

in my client side 

final ProjectServiceAsync getService = GWT.create(ProjectService.class);
getService.connection( new AsyncCallback<String>() 
  {
   public void onFailure(Throwable caught) 
   {
    System.out.println("error");
   }
           
   public void onSuccess(String result) 
   {
    JSONValue jsonValue = JSONParser.parseStrict(result);
    com.google.gwt.json.client.JSONObject customerObject = jsonValue.isObject();
    com.google.gwt.json.client.JSONArray jsonArray = customerObject.get("titre").isArray();
    StringBuilder builder = new StringBuilder("** Livre ** \n"); 
    builder.append(jsonArray.get(0).isObject().get("Titre").isString().stringValue()).append(" ");
    Window.alert(builder.toString());
   
    //resultTxt.setText(result);
   }
  });
}


This code expects an object at top-level with a Titre property being an array of strings; this is not what the sender produces. So even if you fix the dangling commas in the JSON produced by the server, this won't work.

Anyway, I suggest using overlay types and JsonUtils.safeEval instead of com.google.gwt.json; or even directly go with JsInterop.

final class Livre extends JavaScriptObject {
  protected Livre() {}
  public native String getTitre() /*-{ return this.Titre; }-*/;
  public native String getAuteur() /*-{ return this.Auteur; }-*/;
}
JsArray<Livre> livres = JsonUtils.safeEval(result);
for (int i = 0, l = livres.length(); i < l; i++) {
  builder.append(livres.get(i).getTitre()).append(" ");
}
 
(side note: similarly to the JSON generation on server-side, if you intend to use the 'builder' with toInnerHTML or similar, make sure you properly escape it or, better, use SafeHtml, so avoid XSS)

With JsInterop (jsinterop.annotations.*, you'd need 2.8.0-beta1 I believe), it'd be something like:
@JsType
interface Livre {
  @JsProperty(name="Titre") String getTitre();
  @JsProperty(name="Auteur") String getAuteur();
}
Livre[] livres = (Livre[]) JsonUtils.<Object>safeEval(result);

--
You received this message because you are subscribed to the Google Groups "GWT Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to google-web-toolkit+unsubscribe@googlegroups.com.
To post to this group, send email to google-web-toolkit@googlegroups.com.
Visit this group at https://groups.google.com/group/google-web-toolkit.
For more options, visit https://groups.google.com/d/optout.

No comments:

Post a Comment