簡體   English   中英

將Java對象解析為Javascript

[英]Parse Java object to Javascript

在Spring MVC和Jackson中,我有一個很大的Java對象,我將其解析為JSON字符串myBigJSONStringmyBigJSONString )並將其內聯到我的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"}];

在所有當前的瀏覽器中,這應該起作用:

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

Whearat這是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;
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM