I have a json file like below and want to parse the overlays like overlay1,overlay2,overlay3
:
{
"overlays": {
"overlay1": {
"imagesFPS": 12,
"clickThrough": false,
"repeatCount": 0,
"sensitivity": 0.6,
},
"overlay2": {
"cgButtonPressedColor": "#ffaa56",
"relative": "screen",
"isOverlayRendered": true,
"cgBorderWidth": "0px",
},
"overlay3": {
"cgButtonPressedColor": "#007f00",
"text": "Goto Page3 on Touch 5 Release",
}
}
}
Currently I am doing this:
Gson gson = new GsonBuilder().create();
JsonObject job = gson.fromJson(fileReader, JsonObject.class);
JsonObject ovl = job.getAsJsonObject("overlays");
for (int i = 1; i <= 100; i++) {
JsonObject overlay = ovl.getAsJsonObject("overlay" + i);
if (overlay != null) {
osb.setOverlay(jsp.getOverlay(overlay));
}
}
How can I get the length of overlays (here: overlay1
, overlay2
, overlay3
)? How do I query the length of 3
via the gson API?
And I want to know the overlay1,overlay2,overlay3
in a string or array so that I can iterate over them.
Note: Here I have to iterate 100 times or any times so that I can iterate if overlays increase later in json file. It iterates unnecessarily in looping.
How can I iterate only overlay1
or overlay2
or overlay3
and so without unnecessary iterating?
I mean I just want to get the overlay1
, overlay2
, overlay3
and so on in jsonobjects
via Gson.
I have solved this using this code below.
Gson gson = new GsonBuilder().create();
JsonObject job = gson.fromJson(fileReader, JsonObject.class);
JsonObject ovl = job.getAsJsonObject("overlays");
Map<String, Object> data = new Gson().fromJson(ovl, type);
Iterator<String> entries = data.keySet().iterator();
while (entries.hasNext())
{ JsonObject overlay = ovl.getAsJsonObject(entries.next().toString());
if (overlay != null)
{
osb.setOverlay(jsp.getOverlay(overlay));
}
}
Have you considered using an array instead of wrapped objects?
{
"overlays": [
{"overlay1": {
"imagesFPS": 12,
"clickThrough": false,
"repeatCount": 0,
"sensitivity": 0.6,
}},
{"overlay2": {
"cgButtonPressedColor": "#ffaa56",
"relative": "screen",
"isOverlayRendered": true,
"cgBorderWidth": "0px",
}},
{"overlay3": {
"cgButtonPressedColor": "#007f00",
"text": "Goto Page3 on Touch 5 Release",
}}
]
}
And using this code:
Gson gson = new Gson();
JsonObject job = gson.fromJson(fileReader, JsonObject.class);
JsonArray ovl = job.getAsJsonArray("overlays");
if (ovl != null) {
osb.setOverlay(jsb.getOverlay(ovl.get(ovl.lenght() - 1)));
}
Or if you want to use wrapped json objects, you should create a list and insert elements like this:
Gson gson = new Gson();
List<JsonObject> overlays = new LinkedList<>();
JsonObject job = gson.fromJson(fileReader, JsonObject.class);
JsonObject ovl = job.getAsJsonObject("overlays");
for (int i = 1; ; ++i) {
JsonObject overlay = ovl.getAsJsonObject("overlay" + i);
if (overlay == null) {
break;
} else {
overlays.put(overlay);
}
}
// Use "overlays" list
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.