2016-09-15 39 views
1

JSON数组我有这样的JSON数组例如:filesList其从我的常规控制器接收:解析在GSP

[{"filenameAndPath":"a","description":"bb"}, {"filenameAndPath":"c","description":"d"},{"filenameAndPath":"e","description":"f"}] 

以我GSP我想渲染成格式为这样的:

Filename and Path 
a 
Description 
bb 
Filename and Path 
c 
Description 
d 
Filename and Path 
e 
Description 
f 

我该如何解析JSON到gsp页面中的这些标签和字段?

+0

为什么不在控制器中做这项工作,而不是在视图中确定这种东西? –

+0

另外,你的意思是你把它作为一串JSON文本发送给GSP?或者你正在发送一张地图列表? –

+0

我需要这些在另一个控制器中的参数。有没有更好的方法来设计这个? – shanwar

回答

3

首先使用grails.converters.JSON.parse(jsonString)方法解析控制器中的JSON字符串,然后将生成的对象传递到您的视图中,并使用g:each标记遍历数组和对象。

当通过对象迭代/映射条目(就像你{"filenameAndPath":"a","description":"bb"}例子),你可以用漂亮的语法速记:<g:each in="${map}" var="key, value">..</g:each>

对于剩下的普通HTML应该足够了。

0

要解析一个json字符串,它是由Gregor定义的。唯一需要注意的是json null中的字符串需要被转换为真实的null。

这里是一个JSON字符串转换为地图

Map parseJSONSelection(String jsonString) { 
     def u=[] 
     def m=[:] 
     if (userSelection) { 
      def item=JSON.parse(userSelection) 
      item?.each {JSONObject i-> 
       // when an element could be null set it to real null 
       if (JSONObject.NULL.equals(i.field)) { 
        i.field=null 
       } 
       u << i 
      } 
      m.allfilesAndPaths=item?.collect{it.filenameAndPath} 
      m.results=u 
     } 
     return m 
    } 

现在在地图退换它将包含map.results这将是你传递给你的GSP JSON字符串的迭代函数。