Groovy 转换JSON和生产JSON

Groovy 类和JSON之间的相互转换,主要在groovy.json包下面

1. JsonSlurper

JsonSlurper 这个类用于转换JSON文本或从Groovy 数据结构中读取内容例如map、list和一些基本的数据类型如Integer, Double, Boolean和String.

这个类有一系列重载的Parse的方法和一些指定特殊的方法,例如parseText,parseFile..
下一个离职我们将以parseText使用为例,将JSON 字符串转换为list 和map对象。其他parse开头的方法与之类似只是参数不同而已,

import groovy.json.JsonSlurper

class ParseJson_01 {

static
main(args) {

def jsonSlurper = new JsonSlurper()

def object = jsonSlurper.parseText(‘{ "name": "John Doe" } ‘)

assert object instanceof Map

assert object.name == ‘John Doe‘

}

}

JsonSlurper除了maps支持,JSON 数据转被换成lists。

import groovy.json.JsonSlurper

class ParseJson_02 {

static
main(args) {

def jsonSlurper = new JsonSlurper()

def object = jsonSlurper.parseText(‘{ "myList": [4, 8, 15, 16, 23, 42] }‘)

assert object instanceof Map

assert object.myList instanceof List

assert object.myList == [4, 8, 15, 16, 23, 42]

}

}

JSON支持一下的的标准的原始数据类型:string 、number、object、true、false和null. JsonSlurper把这些解析成相应的Groovy类型.

def jsonSlurper = new JsonSlurper()

def object = jsonSlurper.parseText ‘‘‘

{ "simple": 123,

"fraction": 123.66,

"exponential": 123e12

}‘‘‘

assert object instanceof Map

assert object.simple.class == Integer

         assert object.fraction.class == BigDecimal
				

As JsonSlurper is returning pure Groovy object instances without any special JSON classes in the back, its usage is transparent. In fact, JsonSlurper results conform to GPath expressions. GPath is a powerful expression language that is supported by multiple slurpers for different data formats (XmlSlurper for XML being one example).

 
For more details please have a look at the section on GPath expressions.

Json

和groovy 对应的数据类型


JSON


Groovy


string


java.lang.String


number


java.lang.BigDecimal or java.lang.Integer


object


java.util.LinkedHashMap


array


java.util.ArrayList


true


true


false


false


null


null


date


java.util.Date based on the yyyy-MM-dd‘T‘HH:mm:ssZ date format

 
Whenever a value in JSON is null, JsonSlurper supplements it with the Groovy null value. This is in contrast to other JSON parsers that represent a null value with a library-provided singleton object.

1.1. Parser Variants

JsonSlurper comes with a couple of parser implementations. Each parser fits different requirements, it could well be that for certain scenarios the JsonSlurper default parser is not the best bet for all situations. Here is an overview of the shipped parser implementations:

  • The JsonParserCharArray parser basically takes a JSON string and operates on the underlying character array. During value conversion it copies character sub-arrays (a mechanism known as "chopping") and operates on them.
  • The JsonFastParser is a special variant of the JsonParserCharArray and is the fastest parser. However, it is not the default parser for a reason. JsonFastParser is a so-called index-overlay parser. During parsing of the given JSON String it tries as hard as possible to avoid creating new char arrays or String instances. It keeps pointers to the underlying original character array only. In addition, it defers object creation as late as possible. If parsed maps are put into long-term caches care must be taken as the map objects might not be created and still consist of pointer to the original char buffer only. However, JsonFastParser comes with a special chop mode which dices up the char buffer early to keep a small copy of the original buffer. Recommendation is to use the JsonFastParser for JSON buffers under 2MB and keeping the long-term cache restriction in mind.
  • The JsonParserLax is a special variant of the JsonParserCharArray parser. It has similar performance characteristics as JsonFastParser but differs in that it isn‘t exclusively relying on the ECMA-404 JSON grammar. For example it allows for comments, no quote strings etc.
  • The JsonParserUsingCharacterSource is a special parser for very large files. It uses a technique called "character windowing" to parse large JSON files (large means files over 2MB size in this case) with constant performance characteristics.

The default parser implementation for JsonSlurper is JsonParserCharArray. The JsonParserType enumeration contains constants for the parser implementations described above:


Implementation


Constant


JsonParserCharArray


JsonParserType#CHAR_BUFFER


JsonFastParser


JsonParserType#INDEX_OVERLAY


JsonParserLax


JsonParserType#LAX


JsonParserUsingCharacterSource


JsonParserType#CHARACTER_SOURCE

Changing the parser implementation is as easy as setting the JsonParserType with a call to JsonSlurper#setType().

def jsonSlurper = new JsonSlurper(type: JsonParserType.INDEX_OVERLAY)
def object = jsonSlurper.parseText(‘{ "myList": [4, 8, 15, 16, 23, 42] }‘)
assert object instanceof Map
assert object.myList instanceof List
assert object.myList == [4, 8, 15, 16, 23, 42]

2. JsonOutput

JsonOutput is responsible for serialising Groovy objects into JSON strings. It can be seen as companion object to JsonSlurper, being a JSON parser.

JsonOutput comes with overloaded, static toJson methods. Each toJson implementation takes a different parameter type. The static method can either be used directly or by importing the methods with a static import statement.

The result of a toJson call is a String containing the JSON code.

def json = JsonOutput.toJson([name: ‘John Doe‘, age: 42])
assert json == ‘{"name":"John Doe","age":42}‘

JsonOutput does not only support primitive, maps or list data types to be serialized to JSON, it goes further and even has support for serialising POGOs, that is, plain-old Groovy objects.

class Person { String name }
def json = JsonOutput.toJson([ new Person(name: ‘John‘), new Person(name: ‘Max‘) ])
assert json == ‘[{"name":"John"},{"name":"Max"}]‘

As we saw in previous examples, the JSON output is not pretty printed per default. However, the prettyPrint method in JsonSlurper comes to rescue for this task.

def json = JsonOutput.toJson([name: ‘John Doe‘, age: 42])
assert json == ‘{"name":"John Doe","age":42}‘
assert JsonOutput.prettyPrint(json) == ‘‘‘
{
    "name": "John Doe",
    "age": 42
}‘‘‘.stripIndent()

prettyPrint takes a String as single parameter. It must not be used in conjunction with the other JsonOutput methods, it can be applied on arbitrary JSON String instances.

Another way to create JSON from Groovy is to use the JsonBuilder or StreamingJsonBuilder. Both builders provide a DSL which allows to formulate an object graph which is then converted to JSON at some point.

 
For more details on builders, have a look at the builders chapter which covers both JSON builders in great depth.

时间: 2024-11-07 06:00:47

Groovy 转换JSON和生产JSON的相关文章

Json对象与Json字符串互转(4种转换方式)

一.jQuery插件支持的转换方式 1 $.paseJSON(jsonstr);//将json字符串转换为json对象 二.浏览器支持的转换方式(Firefox,Chrome,Opera,Safair,IE9,IE8) 1 JSON.parse(jaonstr);//将json字符串转换为json对象 2 JSON.stringify(jsonobj);//将json对象转换为json字符串 注意:由于ie8(兼容模式),ie7和ie6没有JSON对象,需要使用JSON官方的方式,引入json.

javascript、js操作json方法总结(json字符创转换json对象)

相信前端的同学们对json并不陌生,接触过很多.但是很少人知道json的全称是什么,哈哈,我也是查资 料知道的.(JSON JavaScript Object Notation是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,是理想的数据交换格式.) json可以以数组传递,也可以以对象传递,我前面的文章PHP对发布版本时间轴数据处理,返回的json格式,是一个数组json,然后里面含有对象,这是json常见的格式.后来经过php的处理,结构又发生了变化,最外层是一个对象了,里面是数组和

C#.NET下转换泛型列表为JSON格式

using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Text; using System.Data; using System.Data.Common; using System.Collections; using System.Reflection; namespace LearningAspNet.JSON示例 { public class jso

Json对象与Json字符串的转化、JSON字符串与Java对象的转换

Json对象与Json字符串的转化.JSON字符串与Java对象的转换 一.Json对象与Json字符串的转化 1.jQuery插件支持的转换方式: $.parseJSON( jsonstr ); //jQuery.parseJSON(jsonstr),可以将json字符串转换成json对象 2.浏览器支持的转换方式(Firefox,chrome,opera,safari,ie9,ie8)等浏览器: JSON.stringify(obj)将JSON转为字符串.JSON.parse(string)

Gson解析json字符串、json数组转换成对象

实体类: public class Product { private int id; private String name; private String date; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name

Json串到json对象的转换

JSON(JavaScript Object Notation) JS对象符号 是一种轻量级的数据交换格式 JavaScript eval()函数实现 (一) 标准格式 function JsonFormatting() { var jsonString = '{"Unid":"1","CustomerName":"宋江","Age":"33"}'; var jsonObject = e

js 将json字符串转换为json对象或json对象转换成json字符串

JSON字符串:var str1 = '{ "name": "cxh", "sex": "man" }'; JSON对象:var str2 = { "name": "cxh", "sex": "man" }; 一.JSON字符串转换为JSON对象 要使用上面的str1,必须使用下面的方法先转化为JSON对象: //由JSON字符串转换为JSON对象

json字符串、json对象、数组之间的转换

json字符串转化成json对象 // jquery的方法 var jsonObj = $.parseJSON(jsonStr) //js 的方法 var jsonObj = JSON.parse(jsonStr) json对象转化成json字符串 //js方法 var jsonStr1 = JSON.stringify(jsonObj) json对象和json字符串之间的相互转换 例一:比如我有两个变量,我要将a转换成字符串,将b转换成JSON对象: var a={"name":&q

json字符串和json格式对象的转换

json字符串和json格式对象的转换: 实际编码中json字符串和json格式的对象有时候需要进行相互转换,下面就介绍一下如何实现. 一.jQuery插件支持的转换方式: $.parseJSON( jsonstr ); 以上代码可以将json字符串转换为json格式对象. 二.浏览器支持的转换方式: JSON.parse(jsonstr); //可以将json字符串转换成json对象 JSON.stringify(jsonobj); //可以将json对象转换成json对符串 注意:ie7和i