138 lines
3.8 KiB
Plaintext
138 lines
3.8 KiB
Plaintext
/* NetRexx */
|
|
options replace format comments java crossref symbols nobinary
|
|
|
|
import java.util.List
|
|
import org.json.JSONObject
|
|
import org.json.JSONArray
|
|
import org.json.JSONTokener
|
|
import org.json.JSONException
|
|
|
|
/**
|
|
* Using library from json.org
|
|
*
|
|
* @see http://www.json.org/java/index.html
|
|
*/
|
|
class RJson01 public
|
|
|
|
properties private constant
|
|
JSON_DWARFS = '' -
|
|
'{\n' -
|
|
' "F1937_1" : {\n' -
|
|
' "title" : "Snow White and the Seven Dwarfs",\n' -
|
|
' "year" : 1937,\n' -
|
|
' "medium" : "film",\n' -
|
|
' "dwarfs" : [ "Grumpy", "Happy", "Sleepy", "Bashful", "Sneezy", "Dopey", "Doc" ]\n' -
|
|
' },\n' -
|
|
' "F2012_1" : {\n' -
|
|
' "title" : "Mirror, Mirror",\n' -
|
|
' "year" : 2012,\n' -
|
|
' "medium" : "film",\n' -
|
|
' "dwarfs" : [ "Grimm", "Butcher", "Wolf", "Napoleon", "Half Pint", "Grub", "Chuckles" ]\n' -
|
|
' },\n' -
|
|
'}'
|
|
|
|
/**
|
|
* A bean that looks like the following JSON
|
|
* <pre>
|
|
* {
|
|
* "F2012_2" : {
|
|
* "title" : "Snow White & the Huntsman",
|
|
* "year" : 2012,
|
|
* "medium" : "film",
|
|
* "dwarfs" : [ "Beith", "Quert", "Muir", "Coll", "Duir", "Gus", "Gort", "Nion" ]
|
|
* }
|
|
* }
|
|
* </pre>
|
|
*/
|
|
SAMPLE_BEAN = DwarfBean( -
|
|
"F2012_2", -
|
|
"Snow White & the Huntsman", -
|
|
Long(2012), -
|
|
"film", -
|
|
Arrays.asList([String "Beith", "Quert", "Muir", "Coll", "Duir", "Gus", "Gort", "Nion"]) -
|
|
)
|
|
|
|
method main(args = String[]) public static
|
|
say json2bean(JSON_DWARFS)
|
|
say
|
|
say bean2json(SAMPLE_BEAN)
|
|
say
|
|
return
|
|
|
|
method json2bean(dwarfs) public static returns List
|
|
say "Make beans from this JSON string:"
|
|
say dwarfs
|
|
jsonBeans = ArrayList()
|
|
do
|
|
jd = JSONObject(JSONTokener(dwarfs))
|
|
ns = JSONObject.getNames(jd)
|
|
name = String
|
|
loop name over ns
|
|
dwarves = ArrayList()
|
|
jn = jd.getJSONObject(name)
|
|
title = jn.getString('title')
|
|
year = Long(jn.getLong('year'))
|
|
medium = jn.getString('medium')
|
|
dwa = jn.getJSONArray('dwarfs')
|
|
loop di = 0 to dwa.length() - 1
|
|
dwarves.add(dwa.getString(di))
|
|
end di
|
|
jb = DwarfBean(name, title, year, medium, dwarves)
|
|
jsonBeans.add(jb.toString())
|
|
end name
|
|
catch ex = JSONException
|
|
ex.printStackTrace()
|
|
end
|
|
return jsonBeans
|
|
|
|
method bean2json(sb = DwarfBean) public static returns String
|
|
say "Make JSONObject from this bean:"
|
|
say sb
|
|
jsonString = String
|
|
do
|
|
jd = JSONObject(sb)
|
|
jo = JSONObject()
|
|
jo = jo.put(sb.keyGet(), jd)
|
|
jsonString = jo.toString(2)
|
|
catch ex = JSONException
|
|
ex.printStackTrace()
|
|
end
|
|
return jsonString
|
|
|
|
-- =============================================================================
|
|
class RJson01.DwarfBean public binary
|
|
properties private
|
|
key = String -- not part of bean
|
|
properties indirect
|
|
title = String
|
|
year = Long
|
|
medium = String
|
|
dwarfs = List
|
|
|
|
method DwarfBean(key_ = String null, title_ = String null, year_ = Long null, medium_ = String null, dwarfs_ = List null) public
|
|
keyPut(key_)
|
|
setTitle(title_)
|
|
setYear(year_)
|
|
setMedium(medium_)
|
|
setDwarfs(dwarfs_)
|
|
return
|
|
|
|
method keyPut(key_ = String) public
|
|
key = key_
|
|
return
|
|
|
|
method keyGet() returns String
|
|
return key
|
|
|
|
method toString public returns String
|
|
ts = StringBuilder()
|
|
ts.append(String.format("%s@%08x ", [Object this.getClass().getSimpleName(), Integer(hashCode())]))
|
|
ts.append('[')
|
|
ts.append('key='String.valueOf(keyGet())', ')
|
|
ts.append('title='String.valueOf(getTitle())', ')
|
|
ts.append('year='String.valueOf(getYear())', ')
|
|
ts.append('medium='String.valueOf(getMedium())', ')
|
|
ts.append('dwarfs='String.valueOf(getDwarfs()))
|
|
ts.append(']')
|
|
return ts.toString()
|