Grails Groovy - конвертировать XML в JSON

0

Я прочитал много сообщений об конвертации xml в JSON, но я не нашел решения для своего дела. Я хочу отправить на клиентскую сторону данные xml, преобразованные в JSON, затем проанализировать их с помощью 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);

Я попытался использовать описанное здесь решение: Преобразование XML в JSON в Groovy, но я не получил всю структуру моего xml и на стороне клиента у меня была ошибка: "Неожиданный идентификатор"

  • 0
    Не уверены, что у вас все еще есть проблемы? Следующий ответ (по вашей исходной ссылке) будет обрабатывать преобразование любого XML в JSON. stackoverflow.com/questions/18830248/...
Теги:
groovy
grails

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"]}]}

Готово! Благодаря Тиму здесь очень хорошая работа!

  • 0
    в выходном файле нет атрибутов dataname и str, они также должны быть у меня. И у меня все еще есть неожиданный идентификатор в представлении GSP :(
  • 0
    @ Джилс, ты должен был подправить этот код для обработки своих тегов ... чувак, это действительно работает для меня, попробуй пропустить всю трассировку стека здесь ...
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню