Last active
December 22, 2015 22:09
-
-
Save toby55kij/6537824 to your computer and use it in GitHub Desktop.
JSR353のGroovyサンプル
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"firstName": "Duke", | |
"lastName": "Java", | |
"age": 18, | |
"streetAddress": "100 Internet Dr", | |
"city": "JavaTown", | |
"state": "JA", | |
"postalCode": "12345", | |
"phoneNumbers": [ | |
{ "type": "mobile", "number": "111-111-1111" }, | |
{ "type": "Home", "number": "222-222-2222" } | |
], | |
"memo": [ "memo1", "memo2", "memo3" ] | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@Grapes( | |
@Grab(group='org.glassfish', module='javax.json', version='1.0.2') | |
) | |
import java.io.FileReader | |
import javax.json.Json | |
import javax.json.JsonArray | |
import javax.json.JsonBuilderFactory | |
import javax.json.JsonNumber | |
import javax.json.JsonObject | |
import javax.json.JsonReader | |
import javax.json.JsonReaderFactory | |
import javax.json.JsonString | |
import javax.json.JsonStructure | |
import javax.json.JsonValue | |
import javax.json.JsonValue.ValueType | |
import javax.json.JsonWriter | |
import javax.json.stream.JsonGenerator | |
//オブジェクトモデルをたどる | |
def navigateTree(JsonValue tree, String key) { | |
if (key != null) | |
print "Key ${key}: " | |
switch(tree.getValueType()) { | |
case ValueType.OBJECT: | |
println 'OBJECT' | |
JsonObject object = (JsonObject) tree | |
for (String name : object.keySet()) | |
navigateTree(object.get(name), name) | |
break | |
case ValueType.ARRAY: | |
println 'ARRAY' | |
JsonArray array = (JsonArray) tree | |
for (JsonValue val : array) | |
navigateTree(val, null) | |
break | |
case ValueType.STRING: | |
JsonString st = (JsonString) tree | |
println "STRING ${st.string}" | |
break | |
case ValueType.NUMBER: | |
JsonNumber num = (JsonNumber) tree | |
println "NUMBER ${num.toString()}" | |
break | |
case ValueType.TRUE: | |
case ValueType.FALSE: | |
case ValueType.NULL: | |
println tree.valueType.toString() | |
break | |
} | |
} | |
//JSONファイルの読み込み | |
JsonReader reader = Json.createReaderFactory().createReader(new FileReader('./jsondata.json')) | |
JsonStructure jsonst = reader.read() | |
navigateTree jsonst, null | |
//オブジェクトモデルの構築 | |
JsonBuilderFactory factory = Json.createBuilderFactory() | |
JsonObject model = factory.createObjectBuilder() | |
.add("firstName", "Duke") | |
.add("lastName", "Java") | |
.add("age", 18) | |
.add("streetAddress", "100 Internet Dr") | |
.add("city", "JavaTown") | |
.add("state", "JA") | |
.add("postalCode", "12345") | |
.add("phoneNumbers", factory.createArrayBuilder() | |
.add(factory.createObjectBuilder() | |
.add("type", "mobile") | |
.add("number", "111-111-1111")) | |
.add(factory.createObjectBuilder() | |
.add("type", "Home") | |
.add("number", "222-222-2222"))) | |
.add("memo", factory.createArrayBuilder() | |
.add("memo1") | |
.add("memo2") | |
.add("memo3")) | |
.build() | |
//オブジェクトモデルの出力 | |
def writeString(JsonStructure model) { | |
StringWriter stWriter = new StringWriter() | |
def config = [:] | |
config[JsonGenerator.PRETTY_PRINTING] = true | |
JsonWriter jsonWriter = Json.createWriterFactory(config).createWriter(stWriter) | |
jsonWriter.writeObject(model) | |
jsonWriter.close() | |
stWriter.toString() | |
} | |
println writeString(jsonst) | |
assert writeString(jsonst) == writeString(model) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@Grapes( | |
@Grab(group='org.glassfish', module='javax.json', version='1.0.2') | |
) | |
import javax.json.Json | |
import javax.json.JsonReader | |
import javax.json.JsonStructure | |
import javax.json.JsonWriter | |
import javax.json.stream.JsonGenerator | |
import javax.json.stream.JsonLocation | |
import javax.json.stream.JsonParser | |
import javax.json.stream.JsonParser.Event as E | |
//Streaming APIでの読み込み | |
JsonParser parser = Json.createParser(new FileReader('./jsondata.json')) | |
while (parser.hasNext()) { | |
JsonParser.Event event = parser.next() | |
JsonLocation loc = parser.location | |
print "(${loc.lineNumber}, ${loc.columnNumber}, ${loc.streamOffset})" | |
switch(event) { | |
case E.START_ARRAY: | |
case E.END_ARRAY: | |
case E.START_OBJECT: | |
case E.END_OBJECT: | |
case E.VALUE_FALSE: | |
case E.VALUE_NULL: | |
case E.VALUE_TRUE: | |
println event.toString() | |
break | |
case E.KEY_NAME: | |
print "${event.toString()} ${parser.string} - " | |
break | |
case E.VALUE_STRING: | |
case E.VALUE_NUMBER: | |
println "${event.toString()} ${parser.string}" | |
break | |
} | |
} | |
//Streaming APIでの書き込み | |
StringWriter writer = new StringWriter() | |
def config = [:] | |
config[JsonGenerator.PRETTY_PRINTING] = true | |
JsonGenerator gen = Json.createGeneratorFactory(config).createGenerator(writer) | |
gen.writeStartObject() | |
.write("firstName", "Duke") | |
.write("lastName", "Java") | |
.write("age", 18) | |
.write("streetAddress", "100 Internet Dr") | |
.write("city", "JavaTown") | |
.write("state", "JA") | |
.write("postalCode", "12345") | |
.writeStartArray("phoneNumbers") | |
.writeStartObject() | |
.write("type", "mobile") | |
.write("number", "111-111-1111") | |
.writeEnd() | |
.writeStartObject() | |
.write("type", "Home") | |
.write("number", "222-222-2222") | |
.writeEnd() | |
.writeEnd() | |
.writeStartArray("memo") | |
.write("memo1") | |
.write("memo2") | |
.write("memo3") | |
.writeEnd() | |
.writeEnd() | |
gen.close() | |
println writer.toString() | |
//オブジェクトモデルの出力 | |
def writeString(JsonStructure model) { | |
StringWriter stWriter = new StringWriter() | |
def config = [:] | |
config[JsonGenerator.PRETTY_PRINTING] = true | |
JsonWriter jsonWriter = Json.createWriterFactory(config).createWriter(stWriter) | |
jsonWriter.writeObject(model) | |
jsonWriter.close() | |
stWriter.toString() | |
} | |
//JSONファイルの読み込み | |
JsonReader reader = Json.createReaderFactory().createReader(new FileReader('./jsondata.json')) | |
JsonStructure jsonst = reader.read() | |
assert writer.toString() == writeString(jsonst) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment