【问题标题】:Javascript Parsing of Serialized Groovy Map to JS literal Object序列化 Groovy Map 到 JS 文字对象的 Javascript 解析
【发布时间】:2015-03-26 18:07:05
【问题描述】:

从服务器渲染的字符串:

""['opened':[111, 211, 311, 411, 1013, 1113, 1219], 'closed':[]]""

申请JSON.parse后,我们得到:

"['opened':[111, 211, 311, 411, 1113, 1219], 'closed':[]]"
  //means  : omit the double `"` , from `""something""` to `"something"`

但是,预期的结果是一个 Literal 对象:

即:

   {'opener': [111, 211, 311, 411, 1113, 1219], 'closed':[] }

如何达到这个结果?我的意思是来自序列化 Groovy Map 的 Javascript 文字对象


更多细节:服务器端:

@MessageMapping("/project")
@SendTo("/topic/project")
protected String project(String parameter) {
      def map = ['opened':[111, 211, 311, 411, 1013, 1113, 1219], 'closed':[]]
     return map.inspect()
     
 }

【问题讨论】:

  • 一开始这似乎不是有效的 JSON。我无法使用控制台解析服务器字符串。 Unexpected token :

标签: javascript jquery json grails spring-websocket


【解决方案1】:

如果您将 Groovy 映射返回为 JSON 而不是字符串,则可以让您的生活变得更简单,例如

def myAction() {
  def map = ['opened':[111, 211, 311, 411, 1013, 1113, 1219], 'closed':[]]
  def json = map as JSON
  [result: json, contentType: 'application/json']
}

然后您可以在客户端读取为 JavaScript 对象,例如

var someObject = ${result};

如果您的操作是通过 AJAX 调用的,您应该改用以下操作:

def myAction() {
  def map = ['opened':[111, 211, 311, 411, 1013, 1113, 1219], 'closed':[]]
  render map as JSON
}

【讨论】:

  • 我们使用Spring-websocket而不是内置动作的问题。请参阅更新。
猜你喜欢
  • 1970-01-01
  • 2018-03-26
  • 2021-03-19
  • 1970-01-01
  • 2014-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-27
相关资源
最近更新 更多