【问题标题】:Why does GSON convert array of objects to array of Strings instead?为什么 GSON 将对象数组转换为字符串数组?
【发布时间】:2015-04-23 14:52:15
【问题描述】:

我正在尝试在 JSP 中显示对象列表。 由于 GSON,该列表是从 Java 数组到 Javascript 数组的转换。 算法是:

  1. 在 servlet 中加载对象的数组列表
  2. 使用 GSON 转换为 JSON 对象
  3. 将 JSON 对象转发到 JSP
  4. 在 Javascript 数组中加载 JSON 对象
  5. 将 Javascript 数组显示为 HTML

问题是当我循环 JS 数组时,它无法将 JS 数组的元素识别为对象:

问题是当我循环 JS 数组并打印它的元素时,我得到了第一张图像的字符! 这意味着 GSON 不会将数组转换为对象,而是转换为字符串数组

如何确保 GSON 确实将 JAVA 对象数组转换为 JS 对象数组?

我的班级“Activite”:

public class Activite {
   private int id;
   private String description;
}

Servlet 端:

ArrayList<Activite> listActivite = new ArrayList<Activite>();
// ... Fill array from database ...
String jsonActivite = new Gson().toJson(listActivite);
request.setAttribute( "listActivite", listActivite );
requestDispatcher.include(request, response);

JSP 端:

<!-- Load Array List -->
<script> 
var listActivite =  <%= new Gson().fromJson((String)request.getAttribute("jsonActivite"))%>;
</script>

<p id="demo"><p>

<!-- Print the Array List's objects in the paragraph <p> -->
<script>
var p = document.getElementById("demo");
document.getElementById("demo").innerHTML+=listActivite+"</br></br>";
for(i=0; i<listActivite.length; i++){
    p.innerHTML += 'ID:'+listActivite[i].id+' DESC:'+listActivite[i].description+'</br>';
}  
</script>

【问题讨论】:

  • 在我看来,您好像在 两次 转换为 JSON - 一次在您的 Java 代码中,然后在您的 JSP 中再次。跨度>
  • @Pointy 谢谢,是的,这是一个错误。我将其更正为 fromJson()。但是现在 JSP 将无法识别 fromJson() 方法。为什么?
  • 在哪里?您发布的代码中没有fromJson()。应该没有必要;您的 JSON 字符串是有效的 JavaScript,因此无需进一步解析。
  • @Pointy 我在代码中将toJson() 编辑为fromJson()。我不明白为什么它不起作用。
  • 谢谢@Pointy,我应该只得到你所说的属性,而不需要进一步解析。 var listActivite = &lt;%= request.getAttribute("jsonActivite")%&gt;;

标签: javascript arrays json jakarta-ee gson


【解决方案1】:

正如问题 cmets 中的用户 Pointy 所说,答案是不解析 JSP 中的请求属性。

var listActivite =  <%= request.getAttribute("jsonActivite")%>;

listActivite 现在是一个普通的 JS 对象数组。

谢谢你。

【讨论】:

    猜你喜欢
    • 2023-03-08
    • 2018-01-20
    • 2021-05-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多