Skip to content

Instantly share code, notes, and snippets.

@toby55kij
Last active December 22, 2015 22:09
Show Gist options
  • Save toby55kij/6537824 to your computer and use it in GitHub Desktop.
Save toby55kij/6537824 to your computer and use it in GitHub Desktop.
JSR353のGroovyサンプル
{
"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" ]
}
@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)
@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