【问题标题】:Which is the best method to parse json data at client side?在客户端解析 json 数据的最佳方法是什么?
【发布时间】:2013-04-08 09:47:27
【问题描述】:

我正在使用 Jackson 来编写数据并在客户端使用 gwt-json 来解析数据。我是 在客户端通过字典渲染数据很慢,所以我想加快解析速度。 我尝试使用 eval() 而不是 Dictionary 的 JSNI,它在速度方面与字典相比做得很好,但它存在安全问题。

 private List<Party> getPartyListFormJackson() {    

    String name = "partyListInfo"; // jsp variable     
    String partyListStr = getString(name);     
    JSONArray partyJSONArray = JSONParser.parse(partyListStr).isArray();    
    for(int i=0; i < partyJSONArray.size(); i++) {    
      JSONObject partyJSONObject = (JSONObject) partyJSONArray.get(i);   
      Party party = VsJacksonFactory.getParty(partyJSONObject);    
      partyList.add(party);     
    }    
    return partyList;    
  }    

  public static native String getString(String name) /*-{     
  return eval('$wnd.'+ name);     
}-*/;    

在上面我可以使用哪种方法来代替 eval()?

任何人都可以对此有任何想法,以使其变得更好。

谢谢 MS奈都

【问题讨论】:

    标签: json gwt jackson jsni


    【解决方案1】:

    GWT 基本上有 3 种解析 JSON 的方法(这是没有第三方库的):

    • JSONParser 是旧版 API。使用起来很麻烦,但最灵活,尤其是当您使用 dynamic JSON(其中结构未预先固定)时
    • JsonUtils.safeEval() 和 JavaScriptObjects(又名覆盖类型)是最轻量级的;它将在支持的情况下使用本机 JSON.parse(),并使用正则表达式验证 JSON,然后将其交给 eval(),否则
    • AutoBeans 是最新添加的。它适用于 GWT 和 JVM(服务器端、Android 客户端等)

    当您拥有 JavaScriptObject 实例而不是 JSON 字符串时,所有方法也可以工作(您提到 Dictionary,这与 JSON 无关;这就是我添加此精度的原因)。

    【讨论】:

    • 我使用的是字典而不是 Jsni,字典需要时间从我的 jsp 中获取数据。
    • 除了普通的 JSNI 之外,几乎没有什么比 com.google.gwt.i18n.client.Dictionary 更轻量级的了。您的性能问题是在 devmode 还是 prod 模式下?
    • 我想替换 jsni 中的 eval()..method
    • 那么您是在 eval()'ing 一些 JSON,将对象注入 到全局变量中并使用 Dictionary 从中读取?无论如何,eval() 更安全的等价物是JsonUtils; JSONParser 和 AutoBeans 都委托给它进行解析,其余的都是关于更高级别的 API。选择你的毒药。
    • 你为什么用eval()!? return $wnd[name]。问题是:你为什么使用 JSON 而不是 JS 对象(使用 JS 对象文字表示法,这与 JSON 非常相似)
    猜你喜欢
    • 1970-01-01
    • 2022-01-06
    • 1970-01-01
    • 2019-09-16
    • 2012-06-21
    • 2012-07-28
    • 1970-01-01
    • 2010-10-09
    • 1970-01-01
    相关资源
    最近更新 更多