从JSON创建地图列表

时间:2014-07-22 22:30:45

标签: groovy

我从JSON抓取变量并尝试弄清楚如何将它们放入地图列表中。

我希望地图如下:

[[
   "taskId": 12345, 
   "Name":"User1", 
   "UserId":"abc123"
 ], [
   "taskId": 000000, 
   "Name":"User2", 
   "UserId":"123abc"
]]

一些代码示例:

    Map activitiTasks = [:]

        tasksJson.data.each { taskObject ->
            Map tsksObj = [:]

            String taskId = getTaskId()
            tsksObj.put("taskId", taskId)

            String name = getUserName()
            tsksObj.put("Name", name)

            String userId = getUserId()
            tsksObj.put("userId", userId)

            tsksObj.put("userId", username)
            activitiTasks.put(tsksObj)
        }

2 个答案:

答案 0 :(得分:1)

更新以下蛋白石评论(谢谢:))
我们假设您的输入json文本看起来像

[
    {
        "taskId": "0234",
        "userId": "abc023",
        "name": "User0"
    },
    {
        "taskId": "1234",
        "userId": "abc123",
        "name": "User1"
    },
    {
        "taskId": "2234",
        "userId": "abc223",
        "name": "User2"
    }
]

使用dmahapatro建议的JsonSlurper的以下代码将完成这项工作。 内部对象自动返回为地图

def tasksJson = new JsonSlurper().parseText(jsonlistText)
println activitiTasks
println (activitiTasks[0] instanceof Map)

控制台将显示

[[name:User0,taskId:0234,userId:abc023],[name:User1,taskId:1234,userId:abc123],[name:User2,taskId:2234,userId:abc223]]

答案 1 :(得分:0)

我的数据以字符数组的形式发回,因此在我的控制器中导入了grails.converters.JSON。

一旦我这样做,我通过执行以下命令将地图的ArrayList返回为JSON。我使用它作为AJAX调用,所以使用render而不是return。我使用的调用显示在testController.groovy中(渲染列表为JSON)。

下面示例中的

列表是一个ArrayList(),它通过循环将地图添加到其中。

index.gsp中

function getItems(start) {
   $.ajax({
      url: '(${g.createLink(controller:'test', action:'getItems'})}',
      data: {startValue: start},
      type: "POST",
      success: function(data) {
         $(data).each(function() {
            console.debug($(this)[0].itemId);
         }
      }     
   }
}

testController.groovy

class testController {
   def index() {}
   def getItems() {
      def strStartVal = params.startValue ?: "0"
      def intStartVal = Integer.parseInt(strStartVal)
      def lists = dataService.getItemsFromQueue(intStartVal)
      render lists as JSON
   }
}

dataService.groovy

getItemsFromQueue(int start) {
   def items = getItemsFromDatabase("DBNAME", 20, start)
   List lists = new ArrayList()

   items.data.each { taskObject ->
      Map model = [:]

      ......Some Code Goes Here.......

      lists.add(model)
   }
   return lists
}