grails groovy - 将xml转换为JSON

问题描述 投票:0回答:1

我读了很多关于将xml转换为JSON的帖子,但我没有找到适合我案例的解决方案。我想向客户端发送转换为JSON的xml数据,然后用jquery解析它。

XML:

<mode name="name" >
   <data dataname="STO" str="none">data</data>
   <file dataname="FO" str="none">file</file>
   <file dataname="STO" str="none">file</file>
   <file dataname="STO" str="none">file</file>
   <data dataname="FO" str="none">data</data>
   <data dataname="STO" str="none">data</data>
   <data dataname="FO" str="none">data</data>
</mode>

Groovy的:

def xmlTest = new XmlParser().parse(xmlFile)
def nodetest= xmlTest.mode.find {it.'@name' ==  'name'}

def jsonObject = [ mode: mode.collect {
[ (it.name()): it.text() ]
 } ]

def json = new groovy.json.JsonBuilder( jsonObject )

render(view: "myView", model: [json:json])
return

JQUERY:

var obj = $.parseJSON("${json}");
alert(obj);

我试图使用这里描述的解决方案:Converting XML to JSON in Groovy但我没有得到我的xml的所有结构,在客户端我有一个错误:“意外的标识符”

jquery xml json grails groovy
1个回答
0
投票

伙计!这工作正常,'Groovy Console',但至少没有“意外标识符”错误..

import groovy.json.*
def xml ='''<mode name="name" >
   <data dataname="STO" str="none">ABC</data>
   <file dataname="FO" str="none">DEF</file>
   <file dataname="STO" str="none">GHI</file>
   <file dataname="STO" str="none">JKL</file>
   <data dataname="FO" str="none">MNO</data>
   <data dataname="STO" str="none">PQR</data>
   <data dataname="FO" str="none">STV</data>
</mode>'''.stripMargin()

def parsed = new XmlParser().parseText( xml )
// Deal with each node:
def handle
handle = { mode ->
  if( mode instanceof String ) {
      mode
  }
  else {
      [ (mode.name()): mode.collect( handle ) ]
  }
}

// Convert it to a Map containing a List of Maps
def jsonObject = [ (parsed.name()): parsed.collect { mode ->
   [ (mode.name()): mode.collect( handle ) ]
} ]

// And dump it as Json
def json = new groovy.json.JsonBuilder( jsonObject )

print json

输出:

{"mode":[{"data":["ABC"]},{"file":["DEF"]},{"file":["GHI"]},{"file":["JKL"]}
,{"data":["MNO"]},{"data":["PQR"]},{"data":["STV"]}]}

完成!感谢Tim here真的很好的工作!

© www.soinside.com 2019 - 2024. All rights reserved.