ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

java – 在Groovy中实现Object-JSON映射的标准方法是什么?

2019-07-22 21:00:52  阅读:187  来源: 互联网

标签:java json groovy


Java中,如果我想将一些JSON转换为POJO(或副版本),我将使用Gson甚至FlexJson在某种mapper对象中为我做转换:

public interface JsonMapper<T> {
    public T toPojo(String json);
    public String toJson(T pojo);
}

public class WidgetJsonMapper implements JsonMappper<Widget> {
    private Gson mapper;

    @Override
    public Widget toPojo(String json) {
        // Use mapper to deserialize JSON into POJO
    }

    @Override
    public String toJson(Widget pojo) {
        // Use mapper to serialize a Widget instance into a JSON string.
    }
}

当我们谈论Groovy时,我想知道游戏是如何改变的.我看到Grooovy内置了一个JsonSlurper,并想知道是否可以用某种方式代替JSON映射框架(如Gson).

解决方法:

Gson也可以在Groovy中用于将JSON解析为POGO,反之亦然.分别与JsonSlurper和JsonBuilder相同.两种方式的示例:

@Grab( 'com.google.code.gson:gson:2.8.0' )
import com.google.gson.Gson
import com.google.gson.GsonBuilder
import groovy.json.JsonSlurper
import groovy.json.JsonBuilder

class Book {
    String name
    int isbn
    List<Author> authors
}

class Author {
    String name
    int age
}

def jsonString = '''
{
    "name": "Groovy", 
    "isbn": 12345, 
    "authors": [{
        "name": "John Doe", 
        "age": 30
     }, {
        "name": "Bill Nash", 
        "age": 40
     }] 
}
'''

//To Test
void assertions( book ) {
  book.with {
    assert name == 'Groovy'
    assert isbn == 12345
    assert authors
    assert authors[0].name == 'John Doe'
    assert authors[0].age == 30
    assert authors[1].name == 'Bill Nash'
    assert authors[1].age == 40
  }
}

/* JSON To POGO*/
//Using JsonSlurper
def book = new Book( new JsonSlurper().parseText( jsonString ) )
assertions book

//Using GSON
Gson gson = new Gson()
def bookUsingGson = gson.fromJson( jsonString, Book )
assertions bookUsingGson 

/* POGO To JSON */
//Using JsonBuilder
println new JsonBuilder( book ).toPrettyString()

//Using Gson
println gson.toJson( bookUsingGson )

//Using GsonBuilder for customization
GsonBuilder builder = new GsonBuilder()

// enable pretty print and seriliaze nulls
builder.setPrettyPrinting().serializeNulls()

// customize field title
builder.fieldNamingStrategy = { field -> field.name == "name" ? "title" : field.name }

// use the GsonBuilder to create a gson
Gson gsonBuilder = builder.create()

// pretty print
println gsonBuilder.toJson( bookUsingGson )

标签:java,json,groovy
来源: https://codeday.me/bug/20190722/1506880.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有