![](/img/trans.png)
[英]Stringifying a Java Object throwing Error in JSON.parse Javascript
[英]Parse Java object to Javascript
在Spring MVC和Jackson中,我有一個很大的Java對象,我將其解析為JSON字符串myBigJSONString
( myBigJSONString
)並將其內聯到我的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.