将两个域对象值显示为一个JSON输出

时间:2018-09-19 08:04:59

标签: json grails

我正在做grails,我有一个用例,其中有两个领域类A和B是独立的类,我希望A类和B类的值在一个JSON视图中。

 xmlhttp=new XMLHttpRequest();
 xmlhttp.open("GET","Ulist.json",false);
 xmlhttp.send();
 var list = xmlhttp.responseText;
 obj = JSON.parse(list);

 $scope.data = {};

 $scope.model = {};

 $scope.items = obj;

在Bootstrap.groovy文件中,我编写了以下格式以在JSON视图中显示值。

class A                                                
String name,                                          
String age

class B
String report

2 个答案:

答案 0 :(得分:1)

documentation

  

Groovy附带了在Groovy之间转换的集成支持   对象和JSON。专门用于JSON序列化和   解析可在groovy.json包中找到。

例如,您可以使用groovy.json.JsonBuilder

在您的示例中,您可以尝试

具有A类和B类

class A {
    String name
    String age
}

class B {
    String report
}

在Bootstrap.groovy文件中导入JsonBuilder

import groovy.json.JsonBuilder

然后您可以尝试

A a = new A(name: 'ana', age: '15')
B b = new B(report: 'lorem ipsum...')

JsonBuilder jsonBuilder = new JsonBuilder()

jsonBuilder.result {
    name a.name
    age a.age
    report b.report
}

println jsonBuilder.toString()

输出

{"result":{"name":"ana","age":"15","report":"lorem ipsum..."}}

答案 1 :(得分:0)

如果您想要更可重用的代码,则可以创建一个具有要在json结果中显示的公共属性的新类。

class MyJSONResult(){
   String name
   String age
   String report
   // add more properties as needed

   // constructor
   MyJSONResult(A a, B b){
      name = a.name
      age = a.name
      report = b.report
   }
}

//when you need json result,
import grails.converters.JSON


def json = new MyJSONResult(a, b)
render json as JSON

关于创建一个新类和一个对象的好处是您可以重用它。例如,如果需要在gsp页面中显示相同的结果,则可以将对象传递到视图并访问其属性。

def json = new MyJSONResult(a, b)
render view:'myview', model:[myVar: json]

// in gsp views
${myVar.name}

这样,您用于构建json有效负载的任何业务逻辑都可以用于您的api或您可能需要使用它们的其他任何地方