【问题标题】:Parse Java object to Javascript将 Java 对象解析为 Javascript
【发布时间】:2016-02-17 11:53:11
【问题描述】:

在 Spring MVC 和 Jackson 中,我有一个非常大的 Java 对象,我将其解析为 JSON 字符串 myBigJSONString (~1MB) 并将其内联到我的 HTML 中。

然后在我的 Javascript 中,我执行 JSON.parse(myBigJSONString) 并且一切正常。

但是,如果我将语法正确的 Javascript 对象内联到我的 HTML 中,而不是其字符串表示形式,我的 Javascript 就不必读取这个巨大的字符串并对其进行解析。它已经被解析了。

问题:如何从我的 Java 对象创建一个 Javascript 对象并直接内联它而不通过 JSON 字符串?

编辑:

这就是我完成的 HTML 现在的样子:

var staticDataString = '[{\"propertyA\":\"valueA\"}, {\"propertyB\":\"valueB\"}]';
var staticData = JSON.parse(staticDataString);

这就是我想要的样子

var staticData = [{propertyA:"valueA"}, {propertyB:"valueB"}];

【问题讨论】:

    标签: javascript java json spring-mvc jackson


    【解决方案1】:

    在所有当前的浏览器中,这应该可以工作:

    <script> 
      var obj =  <c:out value="${$myserlvetmapping.myjson}"></c:out>;
      alert(obj.test);
    </script> 
    

    这是 Spring-Handler:

    model.addAttribute("myjson","{test:2}"); 
    

    最后是浏览器源代码:

    var obj =  {test:2};
    alert(obj.test);
    

    alert 报告2

    关于JSON的创建我建议使用“适配器模式”,这意味着很多手写代码。

    为什么需要手写适配器?假设您在 java 中有这样的交叉引用对象:

    class Man {
      Wife wife;
    }
    class Wife {
      Man man;
    }
    Man joe = new Man();
    Wife ann = new Wife();
    joe.wife = ann;
    ann.man = joe;
    

    你的 json 是

    {man:{
      name:'joe',
      wife: {
        name: 'ann',
        man: {
          name: 'joe',
          wife: {
            name: 'ann',
            man: {
              name: 'joe',
              wife: {
                .....
              }
            }
          }
        }
      }
    }}
    

    为了防止递归,您只能使用适配器模式。这会起作用:

    public final class ManJSONAdapter {
      private final Man man;
      public ManJSONAdapter(Man man){
        this.man = man;
      }
      public String toJSON(){
        String result="{";
        if (man != null) {
          result += "name:";
          if (man.name == null){
            result += "undefined"
          } else {
            result += "'" + StringEscapeUtils.ESCAPE_ECMASCRIPT.translate(man.name) +"'";
          }
          result += ",wife:";
          if (man.wife == null) {
             result += "undefined";
          } else {
             ...
          }
        }
        result += "}";
        return result;
      }
    }
    

    【讨论】:

    • “关于 JSON 的创建”是这个问题的重点。
    • 你错过了什么吗?
    • 我认为About the creation of the JSON i suggest to use the "adapter-pattern", this means a lot of hand-written-code. 不足以回答问题的核心。我的对象结构中没有任何循环依赖项,我完全有可能创建一个包含所有额外 " 和 \ 的普通 JSON 字符串。我将尝试通过示例扩展我的问题以更好地说明我的观点。 .
    • 你的意思是你还没有循环依赖!如果有人添加循环依赖怎么办? OutOfMemoryError 杀死你的服务器,你将加入名人堂。
    • 好吧,这可能是真的,但是Jackson 在从Java 到JSON 字符串的序列化过程中没有处理这种循环依赖吗?
    猜你喜欢
    • 1970-01-01
    • 2014-10-17
    • 2016-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-18
    相关资源
    最近更新 更多